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

标签 jsf jsf-2 factory illegalstateexception

我正在使用这个:

  • Tomcat 7.0的
  • JSF 2.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。因此,此问题表明您在Web应用程序的运行时类路径中有另一个JSF实现(例如Mojarra),该实现与之冲突。可以通过jsf-api.jarjsf-impl.jarjavax.faces.jar识别。如果删除所有这些,则此问题应消失。
    或者,如果您实际上打算使用Mojarra代替MyFaces(即您没有在问题中的任何地方明确声明意图的JSF实现/版本,但是您只是像在“JSF 2.0”中一般性地陈述了JSF规范,所以也许您实际上已经不知道您在做什么),那么您应该从网络应用中删除myfaces-*.jar文件。
    也可以看看:

  • JSF wiki page - Installing JSF
  • How to properly install and configure JSF libraries via Maven?
  • Difference between Mojarra and MyFaces
  • JSF implementations and component libraries
  • 关于jsf - java.lang.IllegalStateException:找不到工厂javax.faces.application.ApplicationFactory的备份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18897900/

    相关文章:

    java - 使用 richfaces 链接到外部 URL

    jsf - Primefaces p :messages does not display

    jsf-2 - 如何使用 primefaces 可选数据表迭代 HashMap

    jsf-2 - JSF双重提交表单数据

    java - Spring动态注入(inject),类工厂模式

    java - 如何删除 JSF 中 <?xml ...?> 的第一行?

    jsf - 尝试显示动态生成的条形码时显示上一个条形码

    angularjs - 如何使用 $location 在工厂中获取当前 url 的协议(protocol)主机和端口

    file-upload - Fileupload Primefaces 中的最大文件数

    Java:通过Spring创建基于OCP的工厂?