メニュー・モデルの作成

メニュー階層を手動で作成するかわりにMenuModelクラスを使用して、メニューを動的に作成するためのメニュー・モデルを作成できます。

メニュー・モデルを作成する手順は、次のとおりです。

  1. メニュー・ツリーの各ノードのプロパティを取得および設定できるクラスを作成します。たとえば、ツリー・ノードの各ページには、labelviewIdおよびoutcomeが必要です。子要素があるページでは、その子要素のリストを表すためのプロパティが必要です。
  2. インスタンス化の際に設定する必要があるプロパティの値を使用して、各ページに対するマネージドBeanを階層内に作成します。各Beanは、ステップ1で作成したクラスのインスタンスであることと、その有効範囲がnoneであることが必要です。
    たとえば、次のBeanは、2つの子要素がある「Insurance」ページ用に構成されています。
    <managed-bean>
      <managed-bean-name>insurance</managed-bean-name>
      <managed-bean-class>mypackage.MenuItem</managed-bean-class> //this is the class created in step 1
      <managed-bean-scope>none</managed-bean-scope>
      <managed-property>
        <property-name>children</property-name> 
        <list-entries>
           <value-class>mypackage.MenuItem</value-class> //this is the class created in step 1
           <value>#{health}</value>
           <value>#{dental}</value>
        </list-entries>
      </managed-property>
      <managed-property>
        <property-name>label</property-name>
        <value>Insurance</value>
      </managed-property>
      <managed-property>
        <property-name>viewId</property-name>
        <value>pages/insurance.jsp</value>
      </managed-property>
      <managed-property>
        <property-name>outcome</property-name>
        <value>go.insurance</value>
       </managed-property>
    </managed-bean>        
  3. ChildPropertyTreeModelインスタンスを作成するクラスを作成し、そのクラスを参照するためのマネージドBeanを構成します(ChildPropertyTreeModelの詳細は、ADF FacesのJavadocを参照)。このBeanは、ステップ1で作成したBeanの子プロパティと同じchildPropertyの値を使用してインスタンス化してください(前述の例ではchildrenとなります)。さらに、listInstanceプロパティの値としてルート・ページのリストを使用して、インスタンス化してください。このマネージドBean構成は、次のようになります。
    <managed-bean>
      <managed-bean-name>menuTreeModel</managed-bean-name>
      <managed-bean-class>mypackage.TreeModelAdapter</managed-bean-class>
      <managed-bean-scope>none</managed-bean-scope>
      <managed-property>
    	  <property-name>childProperty</property-name>
    	  <value>children</value>
    	</managed-property>
    	<managed-property>
    	  <property-name>listInstance</property-name>
    	  <list-entries>
    	    <value-class>mypackage.MenuItem</value-class>
    		<value>#{help}</value>
    		<value>#{switch}</value>
    		<value>#{benefits}</value>
    		<value>#{emp}</value>
    	  </list-entries>
    	</managed-property>
    </managed-bean>        
  4. ViewIdPropertyMenuModelインスタンスを作成するクラスを作成します。このインスタンスは、getModel()メソッドをコールすることで取得できます(ViewIdPropertyMenuModelの詳細は、ADF FacesのJavadocを参照)。このクラスを参照するためのマネージドBeanを構成します。これが、すべてのメニュー・コンポーネントのバインド先のBeanとなります。このBeanをインスタンス化し、ステップ3で構成したBeanのmodelプロパティに設定されているinstanceプロパティの値と、viewIdPropertyの値(ステップ1で作成したBeanのviewIdプロパティと同じ値)を指定してください。
    次に例を示します。
    <managed-bean>
      <managed-bean-name>menuModel</managed-bean-name>
    	<managed-bean-class>mypackage.MenuModelAdapter</managed-bean-class>
    	<managed-bean-scope>session</managed-bean-scope>
    	<managed-property>
    	  <property-name>viewIdProperty</property-name>
    	  <value>viewId</value>
    	</managed-property>
    	<managed-property>
    	  <property-name>instance</property-name>
    	  <value>#{menuTreeModel.model}</value>
    	</managed-property>
    </managed-bean>        

メニューの詳細な例は、「ADF Faces開発者ガイド」を参照してください。

これで、個々のコンポーネントをメニュー・モデルに値バインディングしたり、ページ・コンポーネントをバインドすることができます。



メニュー階層について
マネージドBeanを使用したデータへのJSFコンポーネントのバインディング
値バインディングについて
データ表内のファセットの使用
ADF Facesコンポーネントの使用