階層メニューを手動で作成するかわりに、メニューを動的に生成できるメニュー・モデルを作成できます。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コンポーネントの使用
Copyright © 1997, 2006, Oracle. All rights reserved.