2013-08-26 24 views
6

Tôi đọc Java EE 7 Hướng dẫn từ http://docs.oracle.com/javaee/7/tutorial/doc/jsf-facelets005.htm#GIQZRSử dụng namespace xmlns.jcp.org mới trên composit gây java.lang.NullPointerException tại java.util.concurrent.ConcurrentHashMap.putIfAbsent

Sau khi tôi gõ mã ví dụ trong chương 8.5 Thành phần hỗn hợp trong IDE của tôi và chạy ví dụ trên GlassFish4.0, tôi gặp lỗi

java.lang.NullPointerException 
    at java.util.concurrent.ConcurrentHashMap.putIfAbsent(ConcurrentHashMap.java:1078) 
    at com.sun.faces.util.Cache.get(Cache.java:116) 
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.getComponentMetadata(FaceletViewHandlingStrategy.java:237) 
    at com.sun.faces.application.ApplicationImpl.createComponent(ApplicationImpl.java:951) 
    at javax.faces.application.ApplicationWrapper.createComponent(ApplicationWrapper.java:648) 

Sau đó, tôi kiểm tra phiên bản cũ của hướng dẫn này, tôi thấy có sự khác biệt.

Trong Java EE phiên bản 7 mã email.xhtml là như sau:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:composite="http://xmlns.jcp.org/jsf/composite" 
    xmlns:h="http://xmlns.jcp.org/jsf/html"> 

<h:head> 
    <title>This content will not be displayed</title> 
</h:head> 
<h:body> 
    <composite:interface> 
     <composite:attribute name="value" required="false"/> 
    </composite:interface> 

    <composite:implementation> 
     <h:outputLabel value="Email id: "></h:outputLabel> 
     <h:inputText value="#{cc.attrs.value}"></h:inputText> 
    </composite:implementation> 
</h:body> 
</html> 

Nhưng trong 6 phiên bản Java EE

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:composite="http://java.sun.com/jsf/composite" 
    xmlns:h="http://java.sun.com/jsf/html"> 

<h:head> 
    <title>This content will not be displayed</title> 
</h:head> 
<h:body> 
    <composite:interface> 
     <composite:attribute name="value" required="false"/> 
    </composite:interface> 

    <composite:implementation> 
     <h:outputLabel value="Email id: "></h:outputLabel> 
     <h:inputText value="#{cc.attrs.value}"></h:inputText> 
    </composite:implementation> 
</h:body> 
</html> 

Sau khi tôi đã thay đổi mã Java EE 6 phiên bản , lỗi đã biến mất. Sự khác biệt là không gian tên. Tôi không biết đây có phải là vấn đề của hướng dẫn này hay không. Có biết không?

Trả lời

9

Cách cách xmlns.jcp.org không gian tên XML mới được xử lý bị hỏng trong bản phát hành Mojarra đầu tiên 2.2.0 và 2.2.1. Nó đã được sửa trong Mojarra 2.2.2 (lưu ý: vé trong liên kết mô tả các triệu chứng vấn đề khác nhau, nhưng dưới vỏ bọc, về cơ bản nó là nguyên nhân tương tự). Chúng tôi khuyên bạn nên nâng cấp lên ít nhất Mojarra 2.2.2 (luôn chọn tùy chọn mới nhất, nếu có thể). GlassFish 4.0 có gói 2.2.0. Bạn có thể lấy JAR từ javaserverfaces.java.net. Tất cả những gì bạn cần làm là thay thế tập tin javax.faces.jar trong thư mục /modules của GlassFish bằng phiên bản mới hơn.

Hướng dẫn Java EE 7 chính nó là tốt. Nó chỉ là việc thực hiện đã bị phá vỡ. Loại rắc rối này là không bình thường với bản phát hành chính của GlassFish đầu tiên (tất cả đều vội vã để nó sẵn sàng đúng giờ). Tôi khuyên bạn nên đợi với Java EE 7 cho đến khi GlassFish 4.0.1 hoặc 4.1 đã được đưa ra để tránh những bất ngờ trong tương lai. Lưu ý rằng các nhà cung cấp khác như Apache Tomcat và JBoss AS dành thời gian của họ để phát hành một thùng chứa Java EE 7; họ chưa có phiên bản sẵn sàng sản xuất.

+0

Tôi đã tải xuống jar Mojarra 2.2.2 từ liên kết và đặt nó vào/mô-đun. Nhưng tôi vẫn có cùng một vấn đề. Tôi nghĩ tôi nên đợi GlassFish 4.1. Dù sao, cảm ơn câu trả lời của bạn. – Chris

+2

Tôi đã có thể tái tạo sự cố của bạn trên thiết lập GF4 chưa được sửa đổi. Trường hợp sử dụng của bạn bắt đầu hoạt động cho tôi sau khi tôi nâng cấp nó với Mojarra 2.2.2. Bạn đã dọn dẹp các thư mục làm việc/cache/triển khai GF4 chưa? Bạn quản lý máy chủ như thế nào? Độc lập hoặc thông qua một IDE? Lưu ý rằng tôi thường không đăng câu trả lời nếu tôi chưa xác nhận/đã trải qua chính vấn đề đó. – BalusC

+0

Xin lỗi vì những bình luận đầu tiên. Tôi quên đổi tên tệp jar để cho GlassFish tải nó trước. Nó hoạt dộng bây giờ. Cảm ơn – Chris

Các vấn đề liên quan