我正在尝试在JBOSS 7.1.0中部署JSF(Primefaces)应用程序。
我收到以下错误:
18:17:03,390 SEVERE [javax.enterprise.resource.webcontainer.jsf.config] (MSC
service thread 1-8) Critical error during deployment: :
com.sun.faces.config.ConfigurationException:Factory
'javax.faces.context.PartialViewContextFactory' was not configured properly.
at com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactories
Exist(FactoryConfigProcessor.java:305) [jsf-impl-2.1.5-jbossorg-1.jar:2.1.5-SNAP
SHOT]
at com.sun.faces.config.processor.FactoryConfigProcessor.process(Factory
ConfigProcessor.java:219) [jsf-impl-2.1.5-jbossorg-1.jar:2.1.5-SNAPSHOT]
at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:361)
[jsf-impl-2.1.5-jbossorg-1.jar:2.1.5-SNAPSHOT]
at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureLi
stener.java:225) [jsf-impl-2.1.5-jbossorg-1.jar:2.1.5-SNAPSHOT]
at org.apache.catalina.core.StandardContext.contextListenerStart(Standar
dContext.java:3392) [jbossweb-7.0.10.Final.jar:]
at org.apache.catalina.core.StandardContext.start(StandardContext.java:3
850) [jbossweb-7.0.10.Final.jar:]
at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentS
ervice.java:90) [jboss-as-web-7.1.0.Final.jar:7.1.0.Final]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(Se
rviceControllerImpl.java:1811)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceCont
rollerImpl.java:1746)
有什么想法吗?
感谢。
答案 0 :(得分:6)
这表明在webapp的运行时类路径中与另一个JSF实现存在冲突。像JBoss AS,Glassfish,WebSphere,Weblogic等完全成熟的Java EE应用程序服务器已经捆绑了JSF,因为它是Java EE API的一部分。如果您在webapp的/WEB-INF/lib
中提供JSF,则可能与appserver捆绑的JSF冲突。 JSF API部分将从appserver提供的JSF库加载,但JSF impl部分将从webapp提供的JSF库加载。如果它们的版本不同,那么您将收到类似的配置错误。
您有两个选择:
删除webapp-bundled JSF并依赖服务器捆绑的JSF。
告诉服务器使用webapp-bundled JSF。如何做到这一点取决于服务器make / version。在您使用JBoss 7.x的特定情况下,可以将以下上下文参数添加到webapp的web.xml
:
<context-param>
<param-name>org.jboss.jbossfaces.WAR_BUNDLES_JSF_IMPL</param-name>
<param-value>true</param-value>
</context-param>
Barebones JSP / Servlet容器(如Tomcat,Jetty等)不附带JSF捆绑,这就是为什么在定位此类容器时需要在/WEB-INF/lib
中提供自己的JSF库。