3

以下のような非常に複雑な JSF マネージド Bean の構成ファイルがあります。
これをある種の CDI 設定に変換する方法はありますか? on
を使用すると、構成ファイルの値が初期化されません。これは、JSFではなくCDIを使用して初期化しているためだと思います...またはそのようなものです。:)@InjectAbcConfigFactory

<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="1.2"
   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_1_2.xsd">

   <managed-bean>
      <managed-bean-name>AbcConfig</managed-bean-name>
      <managed-bean-class>com.a.b.c.AbcConfigFactory</managed-bean-class>
      <managed-bean-scope>application</managed-bean-scope>
      <managed-property>
         <property-name>abcSites</property-name>
         <list-entries>
            <value-class>com.a.b.c.SiteConfigBean</value-class>
            <value>#{SiteConfig$A}</value>
            <value>#{SiteConfig$B}</value>
         </list-entries>
      </managed-property>
   </managed-bean>


   <managed-bean>
      <managed-bean-name>SiteConfig$A</managed-bean-name>
      <managed-bean-class>com.a.b.c.SiteConfigBean</managed-bean-class>
      <managed-bean-scope>none</managed-bean-scope>
      <managed-property>
         <property-name>siteName</property-name>
         <value>A</value>
      </managed-property>

      <managed-property>
         <property-name>starConfig</property-name>
         <property-class>com.a.b.c.StarConfigBean</property-class>
         <value>#{StarConfig$A}</value>
      </managed-property>
   </managed-bean>

   <managed-bean>
      <managed-bean-name>SiteConfig$B</managed-bean-name>
      <managed-bean-class>com.a.b.c.SiteConfigBean</managed-bean-class>
      <managed-bean-scope>none</managed-bean-scope>
      <managed-property>
         <property-name>siteName</property-name>
         <value>B</value>
      </managed-property>

      <managed-property>
         <property-name>starConfig</property-name>
         <property-class>com.a.b.c.StarConfigBean</property-class>
         <value>#{StarConfig$A}</value>
      </managed-property>
   </managed-bean>

   <managed-bean>
      <managed-bean-name>StarConfig$A</managed-bean-name>
      <managed-bean-class>com.a.b.c.StarConfigBean</managed-bean-class>
      <managed-bean-scope>none</managed-bean-scope>
      <managed-property>
         <property-name>siteName</property-name>
         <value>A</value>
      </managed-property>
   </managed-bean>
</faces-config>
4

1 に答える 1

1

CDI 仕様の初期バージョンには XML 構成 Bean が含まれていましたが、最近の仕様の将来のバージョン (AFAIK) に再含まれるために、後で削除されました。

したがって、短い答えは次のとおりです。いいえ、XML を使用して CDI Bean を構成することはできません (CDI と JSF は 2 つの異なるものであるため、JSF 構成ファイルを変更せずに再利用することはできません - 明らかに)。

問題の解決策は、CDI の拡張メカニズムを使用して正確にその機能 (およびそれ以上) を追加するSeam Solderに付属しています。ただし、CDI Bean に適合させるために、構成をやり直す必要があります。

問題のドメインについて何も知らずに:

XML 構成が、現実世界の要件によって強制されない何らかの歴史的遺物である場合(展開シナリオごとに異なる配線を使用するなど)、XML をダンプして、CDI の型安全な注釈ベースのアプローチに切り替えることを強くお勧めします。すべての主流のユースケース (テスト用のさまざまな配線など) の概念があり、XML で「コーディング」を行う負担から解放されます。

XML ベースの構成が本当に必要な (またはまだ必要な) 場合は、Seam Solder が最適です。

于 2012-05-10T13:26:44.070 に答える