我创建了我的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
这是如何引起的?如何解决?
答案 0 :(得分:21)
IllegalStateException:找不到工厂javax.faces.context.FacesContextFactory的备份
如果用“implementation”替换“backup”,则更容易理解此异常。它最终归结为“我找到了JSF API,但在与我找到JSF API的相同的类路径上下文中没有JSF impl。换句话说,你在运行时类路径中的某个地方有一个JSF API,它没有任何JSF impl。例如。在同一个类路径上下文中,jsf-api.jar
或javaee.jar
没有任何jsf-impl.jar
或javax.faces.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
,此异常应该消失。
答案 1 :(得分:0)
需要将耳朵项目的weblogic-application.xml
更改为
<?xml version='1.0' encoding='UTF-8'?>
<weblogic-application xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-application" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-application
http://www.bea.com/ns/weblogic/weblogic-application/1.0/weblogic-application.xsd">
<prefer-application-packages>
<package-name>org.opensaml.*</package-name>
<package-name>org.slf4j.*</package-name>
<package-name>antlr.*</package-name>
</prefer-application-packages>
<prefer-application-resources>
<resource-name>javax.faces.*</resource-name>
<resource-name>com.sun.faces.*</resource-name>
<resource-name>com.bea.faces.*</resource-name>
<resource-name>META-INF/services/javax.servlet.ServletContainerInitializer</resource-name>
<resource-name>META-INF/services/com.sun.faces.spi.FacesConfigResourceProvider</resource-name>
</prefer-application-resources>
</weblogic-application>
Follwoing jar版本号必须完全匹配:
答案 2 :(得分:0)
感谢我的同事,来自stackoverflow的@Lookub,他添加了另一个apache服务器并将端口设置为8084,它全部编译完毕。作为ide,我们使用netbeans 8.2。您可以在Services&gt;&gt; Servers菜单中执行此操作。希望这可以帮助。