Java.lang.IllegalStateException: Не удалось найти резервную копию для factory javax.faces.application.ApplicationFactory
Я использую это:
но при попытке запустить мое приложение, я получил следующее исключение:
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)
Любые идеи, почему?
Спасибо,
Ответы
Ответ 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 решило проблему.