私はこれを使用しています:
しかし、アプリケーションを実行しようとすると、次の例外が発生しました。
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)
なぜアイデアがありますか?
おかげで、
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
ファイルを削除する必要があります。
BalusCの答えを補完するものとして、Springが管理するBeanのフロントエンドとしてJSFを使用するSpring Bootアプリケーションで独立したJARを実行しようとすると、最近このエラーが発生しました。パッケージをJARからWARに切り替えることで問題が解決しました。
私にとって{Tomcat 8、JSF 2.2、JRE 8}、次の手順は機能しました。
JSTL jars API && IMPLをダウンロードし、Tomcat libに配置します。
プロジェクトファセット構成で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>