マネージドBeanについて

マネージドBeanは、アプリケーションで使用されるJavaBeansで、JSFのfaces-config.xmlファイルに登録されます。JSFアプリケーションを起動すると、この構成ファイルが解析されて、Beanが使用可能になります。マネージドBeanが参照されると(たとえば、コンポーネントのタグ属性の値としてEL式で参照されます。これは値バインディングと呼ばれます。)、マネージドBean作成機能によって、Beanのデフォルトのコンストラクタ・メソッドがコールされて、Beanがインスタンス化されます。また、プロパティが宣言されると、宣言されたデフォルトの値が移入されます。

マネージドBeanは、faces-config.xmlファイルの<managed-bean>要素を使用して登録され、次の要素が含まれています。

名前
Beanの完全修飾クラス名を使用するかわりに、EL式を使用してアプリケーション内でBeanを参照する方法を決定します。
クラス
プロパティが含まれたJavaBeanです。これらのプロパティには、Beanで使用される対応するアクセッサ・メソッドや他のメソッド(ナビゲーションや検証など)とともに、データが保持されます。この要素は、既存のクラス(データ転送クラスなど)、またはページに固有のクラス(バッキングBeanなど)の場合があります。JDeveloperでは、JSF構成エディタを使用してfaces-config.xmlファイルでBeanを宣言すると、設定に基づいてスケルトン・クラスを生成できます。
 
スコープ
Beanが格納される有効範囲を決定します。Beanに対する有効な範囲は、次のとおりです。
管理プロパティ
管理プロパティは、Beanをインスタンス化するときに値を挿入する必要があるBeanのプロパティです。各宣言済プロパティに対するsetメソッドは、Beanの作成時に1度実行されます。マネージドBeanの管理プロパティを構成するときは、プロパティ名、そのクラス・タイプおよびそのデフォルト値を宣言します。デフォルトをNULLにする必要がある場合は、<null-value>要素を使用します。値は、JSF EL式で参照する別のBeanにすることもできます。親Beanが初期化されると、値に宣言されているネストされたBeanも作成および初期化されます。Beanのネスト時には、そのBeanがfaces-config.xmlに存在し、有効範囲に互換性があることを確認する必要があります。
Beanの有効範囲 参照可能なBeanの有効範囲
none none
application none、application
session none、application、session
request none、application、session、request

リストおよびマップ

マネージドBeanおよびマネージドBeanのプロパティは、リストまたはマップとして初期化することもできます。ただし、BeanまたはプロパティのタイプがListまたはMapであるか、あるいはjava.util.Mapまたはjava.util.Listを実装している必要があります。リストまたはマップ内の値のデフォルト・タイプは、<value-class>または<key-class>要素を使用して別のクラスが宣言されていないかぎり、java.lang.Stringです。

リストの場合、次の例に示すように、<list-entries>要素がリスト内の各値に対するコンテナとして動作します。このマネージドBeanはリストであることに注意してください。

<managed-bean>
  <managed-bean-name>options</managed-bean-name>
  <managed-bean-class>java.util.ArrayList</managed-bean-class>
  <managed-bean-scope>application</managed-bean-scope>
  <list-entries>
    <value>Text Only</value>
    <value>Text + HTML</value>
    <value>HTML Only</value>
  </list-entries>
</managed-bean>    

マップの場合、次の例に示すように、個々の<map-entry>要素でマップ内のキー/値のペアが定義されます。この例では、管理プロパティがマップであること、およびキーが整数であるため、<key-class>要素を宣言する必要があることに注意してください。

<managed-bean>
  <managed-bean-name>errorcodes</managed-bean-name>
  <managed-bean-class>com.jsf.databeans.ErrorCodes</managed-bean-class>
  <managed-bean-scope>application</managed-bean-scope>
  <managed-property>
    <property-name>error</property-name> 
    <property-class>java.lang.String</property-class>
    <map-entries>
      <key-class>java.lang.Integer</key-class>
      <map-entry>
        <key>300</key>
        <value>Invalid entry</value>
      </map-entry>
      <map-entry>
        <key>400</key>
        <value>No such value</value>
      </map-entry>
      <map-entry>
        <key>500</key>
        <value>Internal server error</value>
      </map-entry>
    </map-entries>
  </managed-property>  
</managed-bean>    

バッキングBeanについて
値バインディングについて
メソッド・バインディングについて
マネージドBeanおよびバッキングBeanの開発
JSF構成エディタを使用したマネージドBeanの作成
マネージドBeanの構成
JSF EL式の作成