com.sun.faces 的 Difference/Equality > jsf-impl 和 org.glassfish > javax.faces (2.2.4)

Difference/Equality of com.sun.faces > jsf-impl and org.glassfish > javax.faces (2.2.4)

在我的 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/

谁能解释一下区别?不应该完全一样吗?

提示:我知道Sun和Oracle的历史。 ;)

com.sun.faces:jsf-impl contains only the implementation (Mojarra). It lacks the API. You'd need a com.sun.faces:jsf-api顺着吧。

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

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