Webapp的运行时类路径一团糟。
摆脱/ WEB-INF / lib中的那些JAR
javaee-web-api-7.0.jar
javax.faces-2.2.5.jar
javax.servlet-api-3.0.1.jar
第一个旨在用于编译针对Java EE 7容器的WAR / EAR。它不打算沿着针对像Tomcat这样的准JSP /
Servlet容器的WAR安装。会感到困惑,并认为它实际上是Java EE 7容器(哦,高兴)。
第二个是Mojarra 2.2.5(API和impl捆绑在单一JAR风格中),它是您看到的最初麻烦的原因。您基本上是在针对先前已通过Tomcat加载的JSF
2.1 API加载JSF 2.2实现
/lib。该
javax.faces.lifecycle.ClientWindowFactory自JSF
2.2(也看到的是新
@since的Javadoc中),而不是由JSF
2.1 API的认可。
第三个应该由Tomcat本身提供。请注意,Java EE 7 JAR还包含JSF 2.2和Servlet 3.1
API。因此,这毕竟是JSF和Servlet API的三重冲突(一个来自Tomcat的
/libAPI,一个来自WAR的
/WEB-INF/libAPI和一个来自Java EE 7 JAR捆绑包的API;这不好)。
无论如何,我建议也清理Tomcat的/ lib并将其保留为默认值。只需坚持WAR的/ WEB-INF / lib中的JAR。而且,如果你 确实
打算建立一个JSF 2.2的目标Web应用程序(第一双检
version中
faces-config.xml,如果它匹配),然后继续在
javax.faces-2.2.5.jar和摆脱那些
jsf-api-2.1.13.jar和
jsf-impl-2.1.13.jar文件。



