我创建了hello world JSF项目,但是当我将其部署到Tomcat 7时,会遇到以下异常:
java.lang.IllegalStateException: Could not find backup for factory javax.faces.context.FacesContextFactory. at javax.faces.FactoryFinder$FactoryManager.getFactory(FactoryFinder.java:1135) at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:379) at javax.faces.webapp.FacesServlet.init(FacesServlet.java:350) at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1284) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1197) at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:864) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:134) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745)
我已将这些JAR添加到我的项目中:
jstl-1.2.jar
javax.faces-api-2.2.jar
这是怎么引起的,我该如何解决?
IllegalStateException:找不到工厂javax.faces.context.FacesContextFactory的备份
如果将“备份”替换为“实现”,则更容易理解此异常。最终归结为 “我找到了JSF API,但是在与我找到JSF API相同的类路径上下文中,没有JSF隐含” 。换句话说,您在运行时类路径中的某个地方有一个JSF API,该JSF API没有任何JSF impl附带。例如,在相同的classpath上下文中具有jsf-api.jar或什至javaee.jar没有任何jsf- impl.jar或没有javax.faces.jar。请注意,Web应用程序可以具有多个类路径上下文。根据类加载规则,JSF impl必须位于与第一个遇到的JSF API完全相同的位置,并且您需要绝对确保没有重复和/或冲突的版本。
jsf-api.jar
javaee.jar
jsf- impl.jar
javax.faces.jar
在您的特定情况下,
我已经将此jar添加到我的项目中:jstl-1.2.jar和javax.faces-api-2.2.jar
该javax.faces-api-2.2.jar单是不正确的。有两个问题:
如果您想使用Mojarra,请按照其README中的安装说明进行操作。在您的特定情况下,请摆脱此情况,javax.faces- api-2.2.jar然后将最新值javax.faces-2.x.x.jar放在/WEB- INF/lib或中pom.xml,此异常应消失。
javax.faces- api-2.2.jar
javax.faces-2.x.x.jar
/WEB- INF/lib
pom.xml