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

Ben*_*met 30 jsf factory jsf-2 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)
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

谢谢,

Bal*_*usC 33

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

或者,如果你真的打算使用Mojarra而不是MyFaces(你确实没有在你的问题中任何地方明确陈述有意的JSF impl /版本,但你只是在JSF 2.0中一般性地说JSF规范,所以也许你真的有不知道你在做什么),那么你应该myfaces-*.jar从你的webapp中删除文件.

也可以看看:


Cen*_*321 5

补充 BalusC 的答案,我最近在尝试使用 Spring Boot 应用程序运行独立的 JAR 时遇到此错误,该应用程序以 JSF 作为前端并使用 Spring 管理的 bean。将打包从 JAR 切换为 WAR 解决了问题。