Подтвердить что ты не робот

Java.lang.IllegalStateException: Не удалось найти резервную копию для factory javax.faces.application.ApplicationFactory

Я использую это:

  • 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)

Любые идеи, почему?

Спасибо,

4b9b3361

Ответ 1

Это может произойти, если ваш путь к классу среды выполнения webapp загрязнен несколькими объектами/версиями JSF. Элементы org.apache.myfaces в трассировке стека говорят, что вы используете MyFaces. Таким образом, эта проблема предполагает, что у вас есть другая реализация JSF, такая как Mojarra в пути к классам времени выполнения webapp, что противоречит ей. Он распознается jsf-api.jar, или jsf-impl.jar, или javax.faces.jar. Если вы удалите все из них, эта проблема должна исчезнуть.

Или, если вы на самом деле намерены использовать Mojarra вместо MyFaces (вы явно не указали намеренный JSF impl/version в любом месте вашего вопроса, но вы просто указали спецификацию JSF как в "JSF 2.0", поэтому, возможно, вы на самом деле не знали, что вы все делаете), тогда вы должны удалить файлы myfaces-*.jar из своего веб-приложения.

См. также:

Ответ 2

В дополнение к ответу BalusC, я недавно получил эту ошибку при попытке запустить независимый JAR с приложением Spring Boot, в котором JSF является интерфейсом с Spring -managed beans. Переключение упаковки с JAR на WAR решило проблему.