java.lang.IllegalStateException: Imansible trovare il backup per factory javax.faces.application.ApplicationFactory

Sto usando questo:

  • Tomcat 7.0
  • JSF 2.0
  • JRE 7

ma quando ho provato ad eseguire la mia applicazione, ho ottenuto la seguente eccezione:

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) 

Qualche idea, perché?

Grazie,

Ciò può accadere se il percorso di class di runtime del tuo webapp è inquinato da più versioni / versioni di JSF. Le voci org.apache.myfaces nella traccia dello stack indicano che stai utilizzando MyFaces. Questo problema suggerisce quindi che hai un’altra implementazione JSF come Mojarra nel percorso di runtime del webapp che è in conflitto con esso. È riconoscibile da jsf-api.jar o jsf-impl.jar o javax.faces.jar . Se li rimuovi tutti, questo problema dovrebbe scomparire.

Oppure, se in realtà hai intenzione di usare Mojarra invece di MyFaces (non hai specificato esplicitamente l’impl / versione di JSF in qualsiasi punto della tua domanda, ma hai semplicemente dichiarato genericamente la specifica JSF come in “JSF 2.0”, quindi forse hai effettivamente avuto non hai idea di cosa stavi facendo), quindi dovresti rimuovere i file myfaces-*.jar dalla tua webapp.

Guarda anche:

  • Pagina wiki JSF – Installazione di JSF
  • Come installare e configurare correttamente le librerie JSF tramite Maven?
  • Differenza tra Mojarra e MyFaces
  • Implementazioni JSF e librerie di componenti

A complemento della risposta di BalusC, recentemente ho ricevuto questo errore quando cercavo di eseguire un JAR indipendente con un’applicazione Spring Boot con JSF come front-end con bean gestiti da Spring. Il passaggio della confezione da JAR a WAR ha risolto il problema.