web-dev-qa-db-ja.com

java.lang.IllegalStateException:ファクトリ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)

なぜアイデアがありますか?

おかげで、

29
Benjamin Gimet

Webアプリケーションのランタイムクラスパスが複数のJSF impls /バージョンで汚染されている場合に発生する可能性があります。スタックトレースのorg.Apache.myfacesエントリは、MyFacesを使用していることを示しています。したがって、この問題は、競合するwebappのランタイムクラスパスにMojarraなどの別のJSF実装があることを示唆しています。 jsf-api.jar、またはjsf-impl.jar、またはjavax.faces.jarで認識できます。それらをすべて削除すると、この問題は消えます。

または、実際にMyFacesの代わりにMojarraを使用することを意図した場合(つまり、意図したJSF impl/versionを質問のどこかに明示的に記述しなかったが、JSF仕様を「JSF 2.0」あなたが何をしていたのか手がかりがありません)、あなたはあなたのウェブアプリからmyfaces-*.jarファイルを削除する必要があります。

こちらもご覧ください:

32
BalusC

BalusCの答えを補完するものとして、Springが管理するBeanのフロントエンドとしてJSFを使用するSpring Bootアプリケーションで独立したJARを実行しようとすると、最近このエラーが発生しました。パッケージをJARからWARに切り替えることで問題が解決しました。

4
Cenobyte321

私にとって{Tomcat 8、JSF 2.2、JRE 8}、次の手順は機能しました。

  1. JSTL jars API && IMPLをダウンロードし、Tomcat libに配置します。

  2. プロジェクトファセット構成でEclipseからMajorraを直接ダウンロードすることは最近では不可能です。 「Zipファイルは空の例外です」、jsf-api.jarとjsf-impl.jarを手動でダウンロードし、ビルドパスに追加された新しいユーザーライブラリに含めます(一度だけ!)。

これは私のweb.xmlです:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>TestJSF</display-name>
  <welcome-file-list>
    <welcome-file>index.xhtml</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
  </servlet-mapping>
  <context-param>
    <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
  </context-param>
  <context-param>
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
    <param-value>resources.application</param-value>
  </context-param>
  <listener>
    <listener-class>com.Sun.faces.config.ConfigureListener</listener-class>
  </listener>
</web-app>
1
TiyebM