オブジェクトの階層を、そのオブジェクトのデータの列とともに表示するには、ADF Facesのツリー表コンポーネント<af:treeTable>
を使用します。ADF Faces Tableと同様に、ツリー表にはADF Facesの列が子要素としてあり、ADF Facesの表および列コンポーネントにあるすべての機能をサポートしています。たとえば、ツリー表コンポーネントを使用すると、次のツリー表のように、マネージャとその部下をすぐ下にリストして、従業員名、部門、役職および入社日を表示できます。
ADF Facesのツリー表に指定できるのは単一のルートのみですが、各要素には任意の数の子要素を指定できます。前述の表では、1人のルート・マネージャのみが表示されていることに注意してください。ただし、このコンポーネントには、ユーザーが前後のルートを選択できるナビゲーション・メカニズムが組み込まれます。複数のルートを1度に表示する必要がある場合は、ADF Facesのツリー・コンポーネントの使用を検討してください。
このコンポーネントには、次の機能も含まれています。
ADF Facesのツリーと同様に、ツリー表コンポーネントは、oracle.adf.view.faces.model.TreeModel
を使用してモデルにアクセスします。このクラスは、ADF Faces Tableコンポーネントがデータにアクセスする際に使用するTreeModel
を拡張します。TreeModel
の詳細は、「ADF Faces開発者ガイド」またはADF FacesのJavadocを参照してください。
オブジェクト名の列のレンダリングには、nodeStamp
ファセットが使用されます。この列には、階層内の要素の主要な識別子(前述の例では、マネージャと従業員の名前)が表示されます。各要素にコンポーネントを作成するかわりに、このnodeStamp
は、ADF Faces Tableコンポーネントに対して行がレンダリングされるように、繰り返しレンダリングされます。var
属性は、現在のノードへのアクセスを提供します。前述の例では、次のコード・サンプルのように、node
を変数として使用することで、従業員の部門の表示に使用するoutputText
コンポーネント・タグは、#{node.Deptno}
を値として使用できます。
<af:treeTable value="#{employees}" var="node">
<f:facet name="nodeStamp">
<af:column sortable="false">
<f:facet name="header">
<h:outputText value="Employee"/>
</f:facet>
<af:outputText value="#{node.Ename}"/>
</af:column>
</f:facet>
<af:column sortable="false" formatType="number">
<f:facet name="header">
<h:outputText value="Dept. No"/>
</f:facet>
<h:outputText value="#{node.Deptno}"/>
</afcolumn>
</af:treeTable>
ツリー表には、オブジェクト名の列に加え、フォーカス・アイコンをレンダリングする列も指定できます。これらのアイコンを使用して、ユーザーは、ツリー表の特定のサブツリーをズーム・インまたはズーム・アウトできます。この列はpathStamp
ファセットがレンダリングし、さらに、表の上にパス・リンクもレンダリングします(pathStamp
ファセットが削除されると、列とリンクも削除されます)。ツリー表のfocusPath
プロパティは、現在フォーカスがある要素を判断します。次の図は前述と同様の表で、Blakeの行でフォーカス・アイコンをクリックした後の様子を示しています。
ユーザーがKingをクリックして表を当初の表示に戻すパスが、表の上に表示されていることに注意してください。
ユーザーがフォーカスを変更すると、表ではFocusEvent
が生成されます。ユーザーがフォーカスを変更する先の要素は、イベントが配信される前に現行のノードとなります。それに応じて、ツリー表ではfocusPath
プロパティが変更されます。ツリー上のFocusListener
属性は、マネージドBeanのメソッドにバインドできます。その後このメソッドはFocusEvent
に応答して(つまり、ユーザーがフォーカスを変更する都度)起動されます。
ユーザーがノードを開く(または閉じる)と、DisclosureEvent
が送信されます。このイベントのisExpanded
メソッドは、ユーザーによるノードの操作(開いているか、閉じているか)を判断します。DiscolsureEvent
にはリスナーが関連付けられています。ツリー表のDisclosureListener
属性は、マネージドBeanのメソッドにバインドできます。その後このメソッドはDisclosreEvent
に応答して(つまり、ユーザーがノードを開閉する都度)起動されます。
ツリー表には「すべて開く」および「すべて閉じる」リンクもあります。ユーザーがいずれかのリンクをクリックすると、DisclosureAllEvent
が送信されます。このイベントのisExpandAll
メソッドは、ユーザーによるノードの操作(すべてを開いているか、閉じているか)を判断します。この判断に従って、表では、現在フォーカスがあるルート・ノードの子ノードを開きます(または閉じます)。大規模なツリーでは、すべてを開くコマンドによって、すぐ下の子要素以外のノードが開くことはありません。
ADF Facesツリー表コンポーネントは、oracle.adf.view.faces.model.PathSet
クラスのインスタンスを使用して、開かれた要素を判断します。このインスタンスは、コンポーネントのtreeState
属性として格納されます。このインスタンスを使用すると、階層内での要素の開閉状態をプログラムによって制御できます。PathSet
インスタンスによって格納された要素は、開いていると判断されます。他のすべての要素は閉じられます。このクラスは、addAll()
およびremoveAll()
と同様の操作もサポートします。
ADF Faces Tableコンポーネントと同様に、ツリー表コンポーネントも範囲操作を提供します。ただし、ツリー表では、rows
属性ではなく、rowsByDepth
属性が使用されます。この属性の値には、負でない数値をスペースで区切ったリストが指定されます。各数値は、ツリーの深さの範囲サイズを定義します。最初はツリーのルート・ノード数で、最後はツリーのリーフ要素数になります。ツリーの実際の深さがリストのサイズより大きい場合は、残りのブランチのリストにある最後の数が使用されます。0(ゼロ)を使用すると、すべてのデータが表示されます。
たとえば、次の図は、rowsByDepth
プロパティが0 0 3
に設定された表を示しています。この図では、すべてのルート・ノード(ただし、ツリー表では1つのみ)が表示され、ルートのすぐ下の子ノードもすべて表示されます。しかし、その後は各ブランチごとに3ノードのみが表示されます。ツリー表コンポーネントには、他のノードに移動するリンクが挿入されていることに注意してください。
ADF Facesツリー表の作成および編集
ADF Faces Coreライブラリ - <af:treeTable>タグ
Copyright © 1997, 2006, Oracle. All rights reserved.