4

JSF 2.2、Primefaces、Tomcat 7 の依存関係を使用して Maven Web アプリケーションを作成しました。

私の JSF の実装は Mojarra 2.2.4 です。POM に次の依存関係を追加しました。

    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-api</artifactId>
        <version>2.2.4</version>
        <scope>compile</scope>
    </dependency>

    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-impl</artifactId>
        <version>2.2.4</version>
        <scope>compile</scope>
    </dependency>

しかし残念ながら、私はtomcat7-maven-pluginそれに埋め込まれたTomcatに問題があります。コマンドを使用するtomcat7:runと、webapp は問題なく起動しますが、マネージド Bean をロードしようとすると、次のエラーが表示されます。

ターゲットに到達できません。識別子 'testBean' が null に解決されました

これは、webapp が のJSF 1.x代わりに使用していることを示していJSF 2.xます。のコンフィギュレーターは、faces-config.xml を必要とせずに自動的にロード/初期化されない原因となるアノテーションをJSF 1.x認識しません。@ManagedBean

私はTomcat組み込み7.0.50を使用しています.

しかし、私は注釈を認識していませんが@ManagedBean、マネージドビーンタグを使用してのみ機能しfaces-config.xmlます。

JSF 2.xTomcat Embedded のサポートを含める方法はありmaven7-tomcat-pluginますか?

PS:tomcat7:run-war動作しますが、xhtmlコード(例)をオンザフライで変更する可能性がないため、明らかに静的な実行であるため、好きではありません。

4

1 に答える 1

3

次の手順に従って、Mojarra 2.2.4 から MyFaces 2.2.0 に切り替えることを解決しました。

  1. POM で Mojarra の依存関係を削除する
  2. POM に MyFaces の依存関係を追加します。

    <dependency>
        <groupId>org.apache.myfaces.core</groupId>
        <artifactId>myfaces-api</artifactId>
        <version>2.2.0</version>
        <scope>compile</scope>
    </dependency>
    
    <dependency>
        <groupId>org.apache.myfaces.core</groupId>
        <artifactId>myfaces-impl</artifactId>
        <version>2.2.0</version>
        <scope>compile</scope>
    </dependency>
    
  3. web.xml のリスナークラスを変更する

    <listener>
    <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
    

  4. web.xml に context-param を追加します

    <context-param>
         <description>Defines which packages to scan for beans, separated by commas.
             Useful for when using maven and jetty:run (version 6) or tomcat:run
        </description>
        <param-name>org.apache.myfaces.annotation.SCAN_PACKAGES</param-name>
        <param-value>eu.dedalus</param-value>
    

.5 WEB-INF/lib から jsf-api と jsf-impl を削除します。

.6 [ECLIPSE ONLY]M2REPO 変数を使用してビルド パスに myfaces.api および myfaces-impl ライブラリを追加し、jsf-api および jsf-impl ライブラリを削除します。

https://stackoverflow.com/users/814956/lu4242に感謝します!

于 2014-02-11T09:56:25.050 に答える