メニュー・モデルについて

階層メニューを手動で作成するかわりに、メニューを動的に生成できるメニュー・モデルを作成できます。MenuModelクラスはTreeModelを拡張します。したがって、ツリーの作成機能は継承されます(詳細は、「ADF Facesのツリーについて」を参照してください)。また、MenuModelは、現在のviewIdからツリーのルートまでの経路を判断できます。MenuModelクラスの詳細は、「ADF Faces開発者ガイド」またはADF FacesのJavadocを参照してください。

メニュー・モデルの項目は、ADF Facesツリー・コンポーネントを作成するために項目がスタンピングされる方法と同じ方法でスタンピングされます。メニューを作成するには、PageまたはPanelPageコンポーネントを使用できます。Pageコンポーネントは、nodeStampファセットを保持し、メニュー・モデル自体の全レベルをスタンピングできます。したがって、その他のファセットやコンポーネントを使用せずにメニューを作成します。PanelPageコンポーネントは、メニュー・コンポーネントを配置できるファセットを保持します。これらの各コンポーネントには、異なるレベルのメニュー・モデルのスタンピングに使用するnodeStampファセットがあります。nodeStampファセットが格納されるコンポーネントのvar属性は、現在のノードへのアクセスを提供します。

モデルの各項目は、通常viewIdによって判断される現在のフォーカス・パスに基づいてスタンピングされます。nodeStampファセット内に格納されたコマンド・コンポーネントは、各ノードのテキストおよびアクションを提供します。移動して現行のviewIdが変化すると、モデルのフォーカス・パスも変更され、新しい一連のノードがアクセスされます。

次のコード・サンプルに示すように、ノードを表現するために変数を使用することで、その階層レベルで全メニュー項目を表示するために必要なメニュー項目コンポーネント・タグは1つで足ります。

<f:facet name="menu3">
  <af:menuList var="node" value="#{menuModel.model}">
    <f:facet name="nodeStamp">
      <af:commandMenuItem text="#{node.label}"
                          action="#{node.getOutcome}"/>
    </f:facet>
  </af:menuList>
</f:facet>    

この方法を使用すると、各ページで多くのコードを再利用でき、各コンポーネントを手動で挿入するよりもエラーがはるかに少なくなります。


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