java.lang.IllegalStateException:找不到工厂javax.faces.context.FacesContextFactory的备份

Abd*_*OUT 13 jsf tomcat jsf-2

我创建了我的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)
Run Code Online (Sandbox Code Playgroud)

我已将这些JAR添加到我的项目中:

  • jstl-1.2.jar
  • javax.faces-api-2.2.jar

这是怎么造成的,我该如何解决?

Bal*_*usC 22

IllegalStateException:找不到工厂javax.faces.context.FacesContextFactory的备份

如果用"implementation"替换"backup",则更容易理解此异常.它最终归结为"我找到了JSF API,但在与我找到JSF API相同的类路径上下文中没有JSF impl".换句话说,你在运行时类路径中的某个地方有一个JSF API,它没有任何JSF impl.例如,具有jsf-api.jar或甚至javaee.jar没有任何jsf-impl.jarjavax.faces.jar在相同的类路径上下文中.

在您的具体情况下,

我已将这个罐子添加到我的项目中:jstl-1.2.jarjavax.faces-api-2.2.jar

javax.faces-api-2.2.jar单是不正确的.有两个问题:

  • 这是"蓝图"API JAR,用于MojarraMyFaces等JSF实现者.
  • 你忘记了JSF实现JAR.

如果您想使用Mojarra,请按照其自述文件中的安装说明进行操作.在你的具体情况下,摆脱它javax.faces-api-2.2.jar并把最新javax.faces-2.x.x.jar/WEB-INF/lib或者pom.xml这个异常应该消失.

也可以看看: