2015-01-14 25 views
5

以我JSF2應用我所面臨的一個Primefaces NPE(5.1)自動填充在差分com.sun.faces> JSF-IMPL的/平等和org.glassfish> javax.faces(2.2.4)

org.primefaces.component.autocomplete.AutoCompleteRenderer .encodeSuggestionsAsList(AutoCompleteRenderer.java:492)

我已經通過更換行家依賴

<dependency> 
    <groupId>com.sun.faces</groupId> 
    <artifactId>jsf-impl</artifactId> 
    <version>2.2.4</version> 
</dependency> 

解決了我的問題,通過

<dependency> 
    <groupId>org.glassfish</groupId> 
    <artifactId>javax.faces</artifactId> 
    <version>2.2.4</version> 
</dependency> 

這讓我很困惑。

搜索項目主頁,我發現這些Maven倉庫:

http://mvnrepository.com/artifact/com.sun.faces/jsf-impl/2.2.4
http://mvnrepository.com/artifact/org.glassfish/javax.faces/2.2.4

他們都要求相同的描述和引用相同的URL爲主頁:

說明:Oracle的實現 - JSF 2.2規範(2.2.4)
主頁:http://java.sun.com/javaee/javaserverfaces/

有人可以解釋這種差異嗎?不應該完全一樣嗎?

提示:我知道太陽和甲骨文的歷史。 ;)

回答

6

com.sun.faces:jsf-impl只包含實現(Mojarra)。它缺乏API。沿着它你需要一個com.sun.faces:jsf-api

org.glassfish:javax.faces是包含API和impl的單JAR包(您也可以在文件大小上看到它)。

至於你的具體問題只使用jsf-impl時,顯然你忘了jsf-api,或者您在實際使用如Tomcat非Java EE容器依靠javax:javaee-web-api

+0

我使用的是tomcat 8.0.15和JDK 1.8.0_25。 'jsf-api'一直是依賴項的一部分。但我不知道'org.glassfish:javax.faces'是一個包。現在我將刪除jsf-api。但是除了自動完成部分,應用程序正在工作,而且實現不應該完全相同嗎? – ChristophS

+0

但是'javax:javaee-api 7.0'是我的依賴項的一部分。 – ChristophS

+0

Tomcat不是Java EE容器。這是一個準系統JSP/Servlet容器。如果你想要一個Java EE容器,那麼去TomEE或WildFly。 – BalusC