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

2024-01-11

我创建了 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 impl”。换句话说,您在运行时类路径中的某个位置有一个 JSF API,它不附带任何 JSF impl。例如。有一个jsf-api.jar甚至javaee.jar没有任何jsf-impl.jar or javax.faces.jar在相同的类路径上下文中。请注意,Web 应用程序可以有多个类路径上下文。根据类加载规则,JSF impl 必须出现在与第一次遇到的 JSF API 完全相同的位置,并且您需要绝对确保不存在重复和/或冲突的版本。

根据您的具体情况,

我已将此罐子添加到我的项目中:jstl-1.2.jar and javax.faces-api-2.2.jar

The javax.faces-api-2.2.jar单独是不对的。有2个问题:

  • 这是“蓝图”API JAR,旨在供 JSF 实现者使用,例如Mojarra https://eclipse-ee4j.github.io/mojarra/ and MyFaces https://myfaces.apache.org.
  • 您忘记了 JSF 实现 JAR。

如果您想使用 Mojarra,请按照其安装说明进行操作README https://github.com/eclipse-ee4j/mojarra/blob/2.3/README.md。根据您的具体情况,摆脱它javax.faces-api-2.2.jar并把最新的javax.faces-2.x.x.jar https://repo.maven.apache.org/maven2/org/glassfish/javax.faces/ in /WEB-INF/lib or pom.xml这个异常应该消失。

也可以看看:

  • 如何通过 Maven 正确安装和配置 JSF 库? https://stackoverflow.com/questions/8081234/how-to-properly-install-and-configure-jsf-libraries-via-maven/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐