com.sun.faces的差异/平等> jsf-impl和org.glassfish> javax.faces(2.2.4)

时间:2015-01-14 12:00:40

标签: maven jsf-2

在我的JSF2应用程序中,我在Primefaces(5.1)自动完成时遇到了NPE

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

我通过替换maven依赖

解决了我的问题
<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/

有人可以解释一下这个区别吗?不应该完全一样吗?

提示:我了解太阳和甲骨文的历史。 ;)

1 个答案:

答案 0 :(得分:7)

com.sun.faces:jsf-impl仅包含实现(Mojarra)。它缺乏API。你需要一个com.sun.faces:jsf-api

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

关于仅使用jsf-impl时的具体问题,显然您忘记了jsf-api,或者在实际使用非Java EE容器(如Tomcat)时依赖javax:javaee-web-api。 / p>