1

JSF 1 から移行された Glassfish 3.1.1 で実行されている JSF 2.0 アプリケーションがあります。

<managed-bean>
    <managed-bean-name>OnlineBeanHandler</managed-bean-name>
    <managed-bean-class>X.jsf.OnlineBeanHandler</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
            ...
</managed-bean>

これは#{OnlineBeanHandler}、facelet ページで使用できるようにするために行われました。うまくいきます。また、OnlineBeanHandler内で@ javax.inject.Inject を使用して CDI マネージド Bean を取得することもできます。これを @javax.enterprise.inject.Alternative としてマークし、beans.xml で有効にすることで代替手段を提供できます。うまくいきます。

ここで、OnlineBeanHandler 自体に対して同じメカニズムを機能させる必要があります。つまり、<managed-bean>-handling コードで、明示的に指定されたクラスではなく代替クラスを呼び出しますが、同じ手順を実行すると、代替クラスの代わりに基本クラスが取得されます。

これを直接行うことはできますか?


どうやら、このメカニズムはそこでは機能しません。現在の状況では、さらに別のfaces-config.xmlファイルを作成して、そこにあるプロジェクトによってそれらをオーバーライドするだけで済みます。その後、代替の faces-config.xml が各プロジェクトによって提供されます。

4

1 に答える 1

0

これらの2つのタイプの管理Beanは排他的です。CDI Alternativesは、CDIが管理するBeanに対してのみ機能し、JSFがBeanを管理することはありません。faces-configでXMLスニペットを削除し、@ Namedを追加すると、@Alternativeを使用できるようになります。

于 2012-03-02T15:36:06.883 に答える