0

Tomcat6WebサーバーでApacheMyFaces2.1.7を使用してJSF2.0Webアプリケーションを実行しようとしています。このアプリは、Tomahawk 1.1.11と式言語2.2(el-impl-2.2.jar)を使用しています。そのために、myfaces-apiとmyfaces-implをTomcats libフォルダーに入れ、Tomcatsel-api.jarを2.2バリアントに交換しました。

アプリの最初のページを呼び出すと、常にエラーが発生します。

java.lang.IllegalStateException: No Factories configured for this Application. This 
happens if the faces-initialization does not work at all - make sure that you properly 
include all configuration settings necessary for a basic faces application and that all 
the necessary libs are included. Also check the logging output of your web application 
and your container for any exceptions!
If you did that and find nothing, the mistake might be due to the fact that you use 
some special web-containers which do not support registering context-listeners via TLD 
files and a context listener is not setup in your web.xml.
A typical config looks like this;
<listener>
 <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
</listener>

javax.faces.FactoryFinder._getFactory(FactoryFinder.java:286)
javax.faces.FactoryFinder.getFactory(FactoryFinder.java:206)
javax.faces.webapp.FacesServlet.init(FacesServlet.java:116)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(Thread.java:679)

私は間違いなく私ので言及されているxmlスニペットを持っていweb.xmlます。コードをデバッグしようとしましたが、registeredFactoryNamesの267行目javax.faces.FactoryFinderが空であることがわかりました。これがエラーの原因です。しかし、なぜそうなるのかわかりません。そこには何が必要で、どうすればそこに到達できますか?

面白いことに、Webアプリは埋め込み桟橋8を使用して完全に実行されます。したがって、依存関係の問題である必要があります。

これらすべてについてより深い洞察を持っている誰かがここで私を助けてくれることを願っています。

4

2 に答える 2

2

Ok

問題を見つけました。このエラーは、クラスパスにmyfaces-api.jarが2回あることが原因で発生します。したがって、私にとっての問題は、myfaces-api.jarをtomcatlibフォルダーとwebappのWEB-INF/libフォルダーに配置することでした。

mavenで組み込みのtomcatを使用している間、アプリケーション全体の依存関係と、スコープを使用したtomcat6-maven-pluginの依存関係の両方にmyfaces-api.jarがありました。スコープをコンパイルからグローバル依存関係セクションで提供されるように変更しましたが、機能しました。

于 2012-07-25T20:15:33.600 に答える
1

アプリケーションがJSFを使用し、MyFacesが初期化ステップを続行することを示すために、/WEB-INF/フォルダーの下に空のfaces-config.xmlファイルを追加するだけで解決できると思います。詳細については、クラスorg.apache.myfaces.ee6.MyFacesContainerInitializerを参照してください。

于 2012-07-24T15:34:08.050 に答える