ADF Facesのツリーについて

オブジェクトの階層を表示するには、ADF Facesのツリー・コンポーネント<af:tree>を使用します。ADF Facesのツリーでは、複数のルートを指定したり、ツリー内の各要素に任意の数の子要素を指定して、複数の親要素が子要素を共有できます。ツリーの各要素は、階層内でのレベルを示すようにインデントされます。コンポーネントには、ツリーを開閉(展開/折りたたみ)するメカニズムが組み込まれていますが、フォーカス機能はありません。フォーカス機能を使用する必要がある場合や、ツリー内の異なるノードに対するデータの表示する場合は、ADF FacesのTreeTableコンポーネントの使用を検討してください。

たとえば、次のツリーの図のように、ツリー・コンポーネントを使用して、関連する従業員がすぐ下にリストされている部門リストを表示できます。

RESEARCH(調査)部門の従業員が表示されているツリー

ツリー・コンポーネントはoracle.adf.view.faces.model.TreeModelを使用してデータにアクセスします。このクラスは、ADF Faces Tableコンポーネントがデータにアクセスする際に使用するCollectionModelを拡張します。TreeModelクラスの詳細は、「ADF Faces開発者ガイド」またはADF FacesのJavadocを参照してください。

各要素のデータの表示には、nodeStampファセットが使用されます。各要素にコンポーネントを作成するかわりに、このnodeStampは、ADF Faces Tableコンポーネントに対して行がレンダリングされるように、繰り返しレンダリングされます。var属性は、現在のノードへのアクセスを提供します。前述の例では、次のコード・サンプルのように、nodeを変数として使用することで、従業員の名前の表示に使用するoutputTextコンポーネント・タグは、#{node.name}を値として使用できます。

<af:tree var="node">
  <f:facet name="nodeStamp">
    <af:outputText value="#{node.lastname}"/>
  </f:facet>
</af:tree>     

ユーザーがノードを開く(または閉じる)と、DisclosureEventが送信されます。このイベントのisExpandedメソッドは、ユーザーによるノードの操作(開いているか、閉じているか)を判断します。DiscolsureEventにはリスナーが関連付けられています。ツリーのDisclosureListener属性は、マネージドBeanのメソッドにバインドできます。その後このメソッドは、DiscolsureEventに応答して(つまり、ユーザーがノードを開閉する都度)起動されます。

ADF Facesツリー・コンポーネントは、oracle.adf.view.faces.model.PathSetクラスのインスタンスを使用して、開かれた要素を判断します。このインスタンスは、コンポーネントのtreeState属性として格納されます。このインスタンスを使用すると、階層内での要素の開閉状態をプログラムによって制御できます。PathSetインスタンスによって格納された要素は、開いていると判断されます。他すべての要素は閉じられます。このクラスは、addAll()およびremoveAll()と同様の操作もサポートします。

<af:tree>タグ内では、次のコンポーネント・タイプを使用できます。


ADF Facesツリーの作成および編集
ADF Faces Coreライブラリ - <af:tree>タグ