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

我正在使用这个:

  • Tomcat 7.0
  • JSF 2.0
  • JRE 7

但是当试图运行我的应用程序时,我得到了以下exception:

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) 

任何想法为什么?

谢谢,

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

或者,如果你实际上使用Mojarra而不是MyFaces(你没有在你的问题的任何地方明确地声明JSF impl / version的意图,但是你只是一般地说JSF 2.0是“JSF 2.0”不知道你在做什么),那么你应该从你的web应用程序中删除myfaces-*.jar文件。

也可以看看:

  • JSF wiki页面 – 安装JSF
  • 如何通过Maven正确安装和configurationJSF库?
  • 莫哈拉与MyFaces的区别
  • JSF实现和组件库

补充BalusC的答案,我最近得到这个错误,当试图运行一个Spring的应用程序与JSF作为前端与Springpipe理的豆的独立JAR。 将包装从JAR切换到WAR解决了这个问题。