0

Web アプリを JBoss AS 6.1 にデプロイするのに問題があります。私の現在のプロジェクトは、メインの Web アプリ (JSF 2 facelets を使用したコントローラー/マネージド Bean と Web フロントエンド) と、複合コンポーネントとバッキング Bean を含む 1 つの jar に分かれています。しかし、ページにアクセスしようとすると、指定されたコンポーネント タイプをインスタンス化できないというエラーが発生しました。

バッキング Bean をメインの Web アプリにコピーすると問題は解決しますが、これは私が望んでいることではありません。では、気をつけることはありますか?

バッキングビーンは次のようになります

@FacesComponent(value = "elementBase")
public class ElementBase extends UINamingContainer {
    ...
}

および複合コンポーネント インターフェイス

<composite:interface componentType="elementBase">
... some attributes
</composite:interface>

jar の構造は次のとおりです。

-- META-INF
    |-- resources
    |    |-- components
    |         |-- elementBase.xhtml
-- com
    |-- example
    |    |-- ElementBase.class

faces-config.xmlまた、コンポーネント タイプを使用してフォルダ内に追加しようとしましMETA-INFたが、コンポーネント タイプはまだ見つかりませんでした。

4

1 に答える 1

4

JEE6> Packaging JSF facelets (xhtml) and ManagedBeans as JARという質問に対する BalusC の回答を通じて

マネージ Bean およびバリデーター、コンバーターなどの他の JSF クラスについては@ManagedBean@FacesValidator@FacesConverter、 などのアノテーションを付けて、通常の方法で JAR にパッケージ化するだけです。/META-INF/faces-config.xmlJSF 2.0 互換ファイルを JAR で提供するだけで済みます。

<?xml version="1.0" encoding="UTF-8"?>
<faces-config
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
    version="2.0">
</faces-config>

このようにして、JSF がトリガーされ、JAR 内のクラスがスキャンされ、JSF 固有のアノテーションが検出されます。または、JSF 1.x の方法で JAR の faces-config.xml に登録することもできます。

およびJava EE6 チュートリアル: アプリケーション構成リソース ファイル

1 つのアプリケーションに対して複数のアプリケーション構成リソース ファイルを使用できます。JavaServer Faces 実装は、以下を検索して構成ファイルを見つけます。

  • /META-INF/faces-config.xmlWeb アプリケーションの/WEB-INF/lib/ディレクトリおよび親クラス ローダー内の任意の JAR ファイルで名前が付けられたリソース。この名前のリソースが存在する場合、構成リソースとしてロードされます。この方法は、いくつかのコンポーネントとレンダラーを含むパッケージ化されたライブラリに対して実用的です。さらに、faces-config.xml で終わる名前のファイルも構成リソースと見なされ、そのように読み込まれます。

  • javax.faces.application.CONFIG_FILESWeb アプリケーションの複数の構成ファイルへの 1 つ以上の (カンマ区切りの) パスを指定する、Web デプロイメント記述子ファイル内のコンテキスト初期化パラメーター。この方法は、大規模なアプリケーションの各部分のファイルを維持する責任を個別のグループに委任するエンタープライズ規模のアプリケーションで最もよく使用されます。

  • /WEB-INF/アプリケーションのディレクトリにある faces-config.xml という名前のリソース。単純な Web アプリケーションは、この方法で構成ファイルを使用できるようにします。

.. 問題を解決できました。

ステップバイステップのソリューション

  1. バッキング Bean を作成する

    @FacesComponent(value = "elementBase")
    public class ElementBase extends UINamingContainer {
        ...
    }
    
  2. および次のインターフェースを持つ複合コンポーネント

    <composite:interface componentType="elementBase">
        ... some attributes, value holder, ..
    </composite:interface>
    
  3. デプロイされた jar 内にを提供しfaces-config.xmlて、jar に注釈付きクラスが含まれていることを示します。デプロイされた jar の構造は次のようになります。

    -- META-INF
        |-- resources
        |    |-- components
        |         |-- elementBase.xhtml
        |-- faces-config.xml
    -- com
        |-- example
        |    |-- ElementBase.class
    
  4. /WEB-INF/libWeb アプリケーションのフォルダー内に jar をデプロイします。

研究・関連リンク・トピックス

于 2012-09-21T15:36:51.477 に答える