Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf java.lang.IllegalStateException:找不到工厂javax.faces.application.ApplicationFactory的备份_Jsf_Jsf 2_Factory_Illegalstateexception - Fatal编程技术网

Jsf java.lang.IllegalStateException:找不到工厂javax.faces.application.ApplicationFactory的备份

Jsf java.lang.IllegalStateException:找不到工厂javax.faces.application.ApplicationFactory的备份,jsf,jsf-2,factory,illegalstateexception,Jsf,Jsf 2,Factory,Illegalstateexception,我用这个: Tomcat 7.0 JSF2.0 JRE 7 但在尝试运行应用程序时,我遇到以下异常: java.lang.IllegalStateException: Could not find backup for factory javax.faces.application.ApplicationFactory. at javax.faces.FactoryFinder$FactoryManager.getFactory(FactoryFinder.java:1011)

我用这个:

Tomcat 7.0 JSF2.0 JRE 7 但在尝试运行应用程序时,我遇到以下异常:

java.lang.IllegalStateException: Could not find backup for factory javax.faces.application.ApplicationFactory. 
    at javax.faces.FactoryFinder$FactoryManager.getFactory(FactoryFinder.java:1011)
    at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:343)
    at org.apache.myfaces.context.servlet.FacesContextImplBase.getApplication(FacesContextImplBase.java:159)
    at org.apache.myfaces.context.servlet.FacesContextImplBase.getELContext(FacesContextImplBase.java:210)
    at javax.faces.component.UIViewRoot.setLocale(UIViewRoot.java:1463)
    at org.apache.myfaces.webapp.AbstractFacesInitializer._createFacesContext(AbstractFacesInitializer.java:477)
    at org.apache.myfaces.webapp.AbstractFacesInitializer.initStartupFacesContext(AbstractFacesInitializer.java:449)
    at org.apache.myfaces.webapp.StartupServletContextListener.contextInitialized(StartupServletContextListener.java:113)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4797)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5291)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
你知道为什么吗


谢谢,

如果您的Web应用程序的运行时类路径被多个JSF impls/版本污染,可能会发生这种情况。堆栈跟踪中的org.apache.myfaces条目表明您正在使用myfaces。因此,这个问题表明在webapp的运行时类路径中有另一个JSF实现,如Mojarra,它与之冲突。它可以通过jsf-api.jar、jsf-impl.jar或javax.faces.jar识别。如果您删除了所有这些,那么这个问题应该会消失

或者,如果您实际上打算使用Mojara而不是MyFaces,您在问题的任何地方都没有明确说明打算使用的JSF impl/version,但您只是在JSF 2.0中一般性地说明了JSF规范,因此您可能实际上不知道自己在做什么,那么您应该从您的webapp中删除MyFaces-*.jar文件

另见:
作为对BalusC答案的补充,我最近在尝试使用Spring引导应用程序运行独立的JAR时遇到了这个错误,该应用程序的前端是JSF和Spring管理的bean。将包装从JAR切换到WAR解决了问题。

对于me{Tomcat 8,JSF 2.2,JRE 8},以下步骤起作用:

下载JSTL jars API&&IMPL并将其放在Tomcat库中

自从在project中直接从eclipse下载Majorra以来 面配置最近是不可能的;Zip文件为空异常, 手动下载jsf-api.jar和jsf-impl.jar,并将它们包含在 新用户库添加到仅生成一次

这是我的web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>TestJSF</display-name>
  <welcome-file-list>
    <welcome-file>index.xhtml</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
  </servlet-mapping>
  <context-param>
    <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
  </context-param>
  <context-param>
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
    <param-value>resources.application</param-value>
  </context-param>
  <listener>
    <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
  </listener>
</web-app>

除了已经说过的,我在导入第三方项目时遇到了这个问题,原因是pom.xml中定义了两个配置文件,一个用于我的脸,另一个用于Mojarra。
如果这是您的情况,您只需要选择其中一个带有maven-P或在项目属性中的maven部分,指示要使用的概要文件。

重新启动Eclipse后,我遇到了同样的问题。从服务器中删除项目并重新运行它会使问题消失。