JSF構成 - <managed-bean>要素

値バインディング式で参照されると動的にインスタンス化されて構成済の有効範囲内に格納されるJSFマネージドBeanを宣言します。ただし、Beanのインスタンスが現在の有効範囲に存在しないことが必要です。

1つ以上のmanaged-property要素を宣言して、マネージドBeanのプロパティ(Beanのマップ・プロパティまたはリスト・プロパティを含む)を設定値で初期化します。プロパティは、対応するBeanがインスタンス化されると動的に設定されます。構成ファイルで宣言されていないBeanのプロパティは設定されません。

MapEntries要素を宣言して、java.util.Mapにキーと値のペアを移入します。

ListEntries要素を宣言して、java.util.Listに値を移入します。

構文

<managed-bean>
  [<description/>]*
  [<display-name/>]*
  [<icon/>]*
  <managed-bean-name>beanName</managed-bean-name> 
  <managed-bean-class>beanClass</managed-bean-class>
  <managed-bean-scope>
    none | request | session | application 
  </managed-bean-scope>
  [<ManagedProperty >*|<MapEntries>|<ListEntries/>]
</managed-bean>

 ManagedProperty ::=    
<managed-property>
   [<description/>]*
   [<display-name/>]*
   [<icon/>]*
   <property-name>propertyName</property-name>
   [<property-class>propertyClass</property-class>]
   [<Value >|<MapEntries>|<ListEntries >| <null-value/> ]
</managed-property>    
Value::=
<value>simplevalue</value>    
MapEntries ::=
<map-entries>
  [<key-class>KeyClass</key-class>]
  [<value-class>valueClass</value-class>]
  <map-entry>
    <key>key</key>
    <value>value</value>|<null-value/>
   </map-entry>*
</map-entries>    
ListEntries ::=
<list-entries>
  [<value-class>valueClass</value-class>]
  <value>value</value>|<null-value/> 
</list-entries>    

<managed-bean>の子要素

<managed-bean-name>
使用方法: マネージドBeanを一意に識別します。
値: 一意の識別子。
<managed-bean-class>
使用方法: インスタンス化するJavaBeansを宣言します。指定したクラスはJavaBeans規則に準拠する必要があります。たとえば、宣言された各管理プロパティ、マップおよびリストに対して、引数なしのpublicコンストラクタおよびpublicのプロパティsetterが必要です。
値: 関連するJavaBeanの完全修飾Javaクラス名。マップおよびリストの場合は、マネージドBeanのプロパティを参照するかわりに、Bean自体がjava.util.Mapまたはjava.util.Listの実装であることが可能です。
<managed-bean-scope>
使用方法: Beanが使用可能なアプリケーション・スコープを定義します。
値: 次の4つの文字定数のいずれかになります。
managed-property
使用方法: マネージドBeanのプロパティを宣言します。
値: <property-name>子要素、<property-class>子要素(オプション)、および1つ以上の<value>子要素(オプション)か<map-entries>子要素(オプション)または<list-entries>子要素(オプション)のうちのいずれかの値。
<map-entries>
使用方法: キーと値で構成されるマップを定義します。値は、関連するキーを指定して取得します。
値: <key-class>子要素(オプション)、<value-class>子要素(オプション)、および1つ以上の<map-entry>子要素。
<list-entries>
使用方法: 値で構成されるリストを定義します。値は、リスト内における位置を指定して取得します。
値: <value-class>子要素(オプション)、および1つ以上の<value>子要素。

<managed-property>の子要素

<property-name>
使用方法: 値が格納されているプロパティの名前を一意に識別します。
値: 一意の識別子。
<property-class>
使用方法: プロパティ値のJava型を宣言します。クラスは推測可能ですが、構成ファイルがJavaBeanを生成するためのソースである場合はこの要素を移入する必要があります。
値: データ型を定義する完全修飾Javaクラス。
<map-entries>
使用方法: キーと値で構成されるマップを定義します。値は、関連するキーを指定して取得します。
値: <key-class>子要素(オプション)、<value-class>子要素(オプション)、および1つ以上の<map-entry>子要素。
<list-entries>
使用方法: 値で構成されるリストを定義します。値は、リスト内における位置を指定して取得します。
値: <value-class>子要素(オプション)、および1つ以上の<value>子要素。

<map-entries>および<map-entry>の子要素

<key-class>
使用方法: キーが変換されるデータ型を宣言します。宣言しない場合、値はStringのままです。
値: データ型を表す完全修飾Javaクラス名。
<map-entry>
使用方法: マップにキーと値のペアを1つ定義します。
値: 1つの<key>子要素、および1つの<value>子要素。
<key>
使用方法: マップのキーのString表現を定義します。
値: マップの<key-class>に変換可能な文字列。

共通要素

<value>
使用方法: 親要素の単純な値を定義します。
値: 親要素のデータ型に変換可能な文字列。文字列には、別のbeanを表すJSF EL式を使用できます。親beanが初期化されるときに、値要素で宣言されているネストされたBeanも作成および初期化されます。Beanのネスト時に、そのBeanがfaces-config.xmlに存在し、有効範囲に互換性があることを確認する必要があります。
Beanの有効範囲 参照可能なBeanの有効範囲
none none
application none、application
session none、application、session
request none、application、session、request
<value-class>
使用方法: 値が変換されるデータ型を宣言します。リストおよびマップの場合、値は、<list-entries>または<map-entries>要素に追加される前に変換されます。この要素を宣言しないと、値はStringのままです。
値: データ型を表す完全修飾Javaクラス名。
 
 
<null-value>
使用方法: 明示的にnullに設定する、親要素の値を宣言します。関連する<property-class>がJavaプリミティブ型に設定されている場合、この要素は使用できません。
値: なし。

  1. 管理プロパティを使用するJavaBeanクラス
  2. マネージドBeanのmapプロパティ
  3. リストのマネージドBean
カスタムのJavaBeanクラスで定義されたマネージドBean。BeanがEL式#{tax.rate}を使用してインスタンス化されると、rateプロパティは値5で初期化されます(Floatに変換されます)。
<managed-bean>
  <managed-bean-name>tax</managed-bean-name>
  <managed-bean-class>com.jsf.databeans.TaxRateBean</managed-bean-class>
  <managed-bean-scope>application</managed-bean-scope>
  <managed-property>
    <property-name>rate</property-name>
    <property-class>java.lang.Float</property-class>
    <value>5</value>
  </managed-property>
</managed-bean>        
 
errorプロパティを含む、mapのマネージドBean。アプリケーションでEL式#{errorcodes.error}が検出されると、ErrorCodesオブジェクトがインスタンス化され、errorプロパティのキーと値のペアは、宣言されたmap-entry ペアの値で初期化されます。
<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.util.HashMap</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。アプリケーションでEL式#{options.text}が検出されると、Listオブジェクトが作成されて、宣言されたlist-entriesの値で初期化されます。managed-property要素が宣言されていないかわりに、list-entriesmanaged-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>        

<description>要素
<display-name>要素
<icon>要素
<attribute>要素
<property>要素
JSF構成エディタを使用したマネージドBeanの作成
リファレンス: JSF構成要素