Hello World JSFプロジェクトを作成しましたが、Tomcat 7にデプロイすると、次の例外が発生します。
Java.lang.IllegalStateException: Could not find backup for factory javax.faces.context.FacesContextFactory.
at javax.faces.FactoryFinder$FactoryManager.getFactory(FactoryFinder.Java:1135)
at javax.faces.FactoryFinder.getFactory(FactoryFinder.Java:379)
at javax.faces.webapp.FacesServlet.init(FacesServlet.Java:350)
at org.Apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.Java:1284)
at org.Apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.Java:1197)
at org.Apache.catalina.core.StandardWrapper.allocate(StandardWrapper.Java:864)
at org.Apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.Java:134)
at org.Apache.catalina.core.StandardContextValve.invoke(StandardContextValve.Java:122)
at org.Apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.Java:501)
at org.Apache.catalina.core.StandardHostValve.invoke(StandardHostValve.Java:171)
at org.Apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.Java:102)
at org.Apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.Java:950)
at org.Apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.Java:116)
at org.Apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.Java:408)
at org.Apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.Java:1040)
at org.Apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.Java:607)
at org.Apache.Tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.Java:316)
at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1145)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:615)
at org.Apache.Tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.Java:61)
at Java.lang.Thread.run(Thread.Java:745)
これらのJARをプロジェクトに追加しました。
jstl-1.2.jar
javax.faces-api-2.2.jar
これはどのように引き起こされ、どうすれば解決できますか?
IllegalStateException:ファクトリjavax.faces.context.FacesContextFactoryのバックアップが見つかりませんでした
この例外は、「backup」を「implementation」に置き換えると理解しやすくなります。最終的に「JSF APIを見つけましたが、JSF APIを見つけた場所と同じクラスパスコンテキストにJSFが実装されている場所はありません」。つまり、実行時クラスパスのどこかにJSF APIがあり、JSF実装は何も付いていません。例えば。 jsf-api.jar
あるいは javaee.jar
なしjsf-impl.jar
またはjavax.faces.jar
同じクラスパスコンテキストで。 Webアプリケーションは複数のクラスパスコンテキストを持つことができることに注意してください。 JSF実装は、クラスローディングルールに従って最初に検出されたJSF APIとまったく同じ場所に存在する必要があり、バージョンの重複や競合がないことを完全に確認する必要があります。
あなたの特定のケースでは、
このjarをプロジェクトに追加しました:
jstl-1.2.jar
およびjavax.faces-api-2.2.jar
javax.faces-api-2.2.jar
だけでは正しくありません。 2つの問題があります。
Mojarraを使用する場合は、そのインストール手順に従ってください [〜#〜] readme [〜#〜] 。あなたの特定のケースでは、それを取り除きますjavax.faces-api-2.2.jar
と最新の javax.faces-2.x.x.jar
/WEB-INF/lib
またはpom.xml
そしてこの例外は消えるはずです。
私の同僚、stackoverflowの@Lookubのおかげで、彼は別のApacheサーバーを追加し、ポートを8084に設定して、すべてコンパイルしました。念のため、私たちはnetbeans 8.2を使用しています。これは、サービス>>サーバーメニューで行うことができます。お役に立てれば。
Earプロジェクトのweblogic-application.xml
を
<?xml version='1.0' encoding='UTF-8'?>
<weblogic-application xmlns:wls="http://xmlns.Oracle.com/weblogic/weblogic-application" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-application
http://www.bea.com/ns/weblogic/weblogic-application/1.0/weblogic-application.xsd">
<prefer-application-packages>
<package-name>org.opensaml.*</package-name>
<package-name>org.slf4j.*</package-name>
<package-name>antlr.*</package-name>
</prefer-application-packages>
<prefer-application-resources>
<resource-name>javax.faces.*</resource-name>
<resource-name>com.Sun.faces.*</resource-name>
<resource-name>com.bea.faces.*</resource-name>
<resource-name>META-INF/services/javax.servlet.ServletContainerInitializer</resource-name>
<resource-name>META-INF/services/com.Sun.faces.spi.FacesConfigResourceProvider</resource-name>
</prefer-application-resources>
</weblogic-application>
次のjarバージョン番号は正確に一致する必要があります。