ADF Faces Tableコンポーネントのtable
タグを使用して作成する表は、JSFのdataTable
タグを使用して作成する表に類似しており、次の追加機能があります。
dataTable
と同様に、ADF Facesのtable
には、列を子要素として挿入する必要があります。ADF Faces Tableでは、ADF Facesのcolumn
タグを使用します。詳細は、「ADF Facesの列について」を参照してください。
これらの各追加機能および2つの表の違いは、次の各項で説明します。JSFのdataTable
タグの詳細は、「データ表について」を参照してください。
ADF Facesのtable
タグの詳細は、「ADF Faces開発者ガイド」を参照してください。
table
とJSFのdataTable
の違い
標準のJSF表と同様に、ADF Faces Tableは各行のデータの列タグを処理する間にデータ収集を繰り返します。ただし、ADF Faces Tableには、ADF Facesの列タグ(af:column
)を使用する必要があります。表はoracle.adf.view.faces.model.CollectionModel
を使用してデータにアクセスします。したがって、ADF Faces Tableの値属性は、該当するモデルのインスタンスであるマネージドBeanまたは次のいずれかにバインドできます。
java.util.List
のインスタンス
java.sql.ResultSet
のインスタンス
javax.servlet.jsp.jstl.sql.ResultSet
のインスタンス
javax.sql.RowSet
のインスタンス
javax.faces.model.DataModel
のインスタンス
CollectionModel
以外のモデルの場合、表では、インスタンスが自動的にCollectionModel
に変換されます。
table
の追加機能
大きいデータ・セットに表がバインドされ、表の行すべてを1度に表示しないようにする場合は、rows
属性を設定して、リクエストごとに表示する行数を設定できます。設定後のADF Faces Tableでは、ユーザーが行の範囲(次または前)を選択できるナビゲーション・リンクが提供されます。コレクション・サイズ合計がわかっている場合は、コレクション内の特定範囲セットに直接移動できるコントロールが、次のように表示されます。
このコントロールを表示するには、ADF Faces TableコンポーネントにビルトインされているSelectRangeChoiceBar
コンポーネントを使用します。範囲操作を無効にする(および1ページにすべての行を表示する)には、row
属性を0
に設定します。
範囲を設定するには、rows
属性とfirst
属性を併用します。first
属性は表示する現在の範囲を決定します。この属性は、リスト内の各行の索引(ゼロから開始)です。各範囲はfirst
で識別された行から開始し、rows
属性に指定された行数のみが範囲に含まれます。最初は、first
属性がゼロにデフォルト設定され、第1行目が上部にある状態で範囲が表示されます。
ユーザーが(「前へ」や「次へ」などのナビゲーション・リンクの1つを選択して)別の範囲に移動すると、表ではRangeChangeEvent
が生成されます。このイベントには、範囲の先頭になる行の索引が挿入されます。表では、first
属性の値を新しい索引に変更することで、このイベントに応答します。first
属性の値は、ユーザーがページを離れると保存されません。たとえば、従業員名がリンクとして表示される表を作成したとします。ユーザーは、リンクをクリックして従業員の詳細情報を表示する別のページに移動できます。ユーザーが最初に範囲を変更(したがってfirst
属性も変化)して、従業員名のリンクをクリック(別のページに移動)すると、元の表ではfirst
属性が0(ゼロ)に設定されて表示されます。つまり、ユーザーが従業員リンクをクリックした範囲ではなく、最初の範囲が表示されます。
RangeChangeEvent
にはリスナーが関連付けられています。表のRangeChangeListener
属性は、マネージドBeanのメソッドにバインドできます。その後このメソッドはRangeChangeEvent
に応じて(つまり、ユーザーによる表の範囲変更によってfirst
属性が変化する都度)起動されます。これは、ユーザー・ナビゲーションに対応してなんらかのアクションを実行する必要がある場合(前の範囲用に作成したキャッシュ・データをリリースする必要がある場合など)に便利です。
ユーザー・アクションに基づいて表示または非表示にできるデータを挿入するには、表でdetailStamp
ファセットを使用します。表示または非表示にするデータにバインドされるこのファセットに、コンポーネントを挿入します。表には、「詳細」というラベルの列が追加され、アクティブ化してコンポーネントにバインドされたデータを表示できるトグルが表示されます。このトグルが非アクティブ化されると、次の図のようにデータは非表示になります。
トグルがアクティブ化されると、次の図のようにデータが第2の行に表示されます。
表のallDetailsEnabled
属性をTrueに設定すると、次の図のように、すべての行の詳細を表示または非表示にできるリンクが表示されます。
ユーザーが行の詳細を表示または非表示にすると、表ではDisclosureEvent
(または表のallDetailsEnabled
属性がTrueに設定されている場合はDisclosureAllEvent
)が生成されます。これによって、詳細のトグル(開く/閉じる)が表に指示されます。DisclosureEvent
にはリスナーが関連付けられています。表のDisclosureListener
属性は、マネージドBeanのメソッドにバインドできます。その後、DisclosureEvent
に応じてこのメソッドが起動され、必要な後処理が実行されます。
selection
ファセットを使用すると、1番左側に列を挿入できます。ユーザーは、この列で、1つ以上の行を選択し、それらの行に対してアクションを実行できます。このファセットで<af:tableSelectOne>
タグを使用し、ユーザーが単一の行を選択できるラジオ・ボタン表示列を指定します。ユーザーが1つ以上の行を選択できるチェックボックス表示列を指定するには、<af:tableSelectMany>
タグを使用します。また、tableSelectMany
タグを使用すると、ユーザーが行のすべてを選択したり、選択をすべて解除できるリンクが表示されます。
両方のタグにはtext
属性があります。この属性の値にはユーザーへの説明を指定できます。これらのタグには、通常、ActionSource
が子コンポーネントとして使用され、選択した行に対してアクションを実行するために使用されます。たとえば、選択した行をユーザーが削除または更新できるように、tableSelectMany
タグ内にcommandButton
タグを挿入できます。
ユーザーが選択してボタンをクリックすると、tableSelectOne
またはtableSelectMany
コンポーネントは、そのボタンに関連付けられているActionListener
をコールする前に、表のgetSelectionState()
をコールすることで取得したRowKeySet
を更新します。tableSelectOne
の場合は、現在の行がActionListener
の起動前に選択されているため、対応する処理を行のデータに提供するマネージドBeanのメソッドに、commandButton
のActionListener
をバインドできます。tableSelectMany
場合、ActionListener
は、表のgetSelectionState().getRowKeyIterator()
をコールすることで、選択されたrowKeys
を取得します。tableSelectOne
タグと同様に、commandButton
のActionListener
属性は、行のデータに必要な処理を提供するマネージドBeanのメソッドにバインドします。
tableSelectOne
コンポーネントとtableSelectMany
コンポーネントはいずれも表の選択状態が変化したときにSelectionEvent
をトリガーします。SelectionEvent
は、選択された行または選択が解除された行をレポートします。表のSelectionEventListener
属性は、マネージドBeanのメソッドにバインドできます。このメソッドは、SelectionEvent
に応じて起動され、必要な後処理を実行します。
required
属性は、tableSelectOne
およびtableSelectMany
の両方のコンポーネントに設定できます。これによって、ユーザーが行を選択しなかった場合にエラーがスローされます。ただし、required
属性を設定した場合は、必須入力を示すエラー・メッセージを正しく表示するために、表のsummary
属性も設定する必要があります。
tableSelectOne
およびtableSelectMany
コンポーネントには、autoSubmit属性も設定できます。true
に設定すると、ユーザーが選択を実行したときに、表が格納されているフォームが自動的に発行されます。詳細は、「自動発行およびADF Faces入力コンポーネントについて」を参照してください。
次の図に、ユーザーが1つ以上の部門を選択した後で、削除または更新できる表を示します。
次に、JSFページのファセットに対応するコードを示します。
<f:facet name="selection">
<af:tableSelectMany text="Select a department and press the Delete to remove the departement
or press Update to edit the department ">
<af:commandButton text="Delete" actionListener="#{mybean.deleteDept}"/>
<af:commandButton text="Update" actionListener="#{mybean.updateDept}"/>
</af:tableSelectMany>
</f:facet>
次に、mybean
マネージドBeanのdeleteDept
メソッドに対応するコードを示します。
public void deleteDept(ActionEvent action)
{
UIXTable table = getTable();
Iterator selection = table.getSelectionState().getRowKeyIterator();
String oldKey = table.getRowKey();
while(selection.hasNext())
{
String rowKey = (String) selection.next();
table.setRowKey(rowKey);
MyRowImpl row = (MyRowImpl) table.getRowData();
row.markForDeletion();
}
// restore the old key:
table.setRowKey(oldKey);
}
// Binding methods for access to the table.
public void setTable(UIXTable table) { _table = table;}
public UIXTable getTable() {return _table;}
private UIXTable _table;
このコードはtableSelectOne
コンポーネントに対しても機能しますが、イテレータで戻されるのは多くても常に1行です。
また、ADFデータ・バインディングは、<af:tableSelectMany>
タグをサポートしません。詳細は、「Oracle ADFスタート・ガイド」を参照してください。
ADF Faces Tableコンポーネントは、行のソートをサポートしています。ただし、基礎となるCollectionModel
では、次のメソッドを実装している必要があります。
public boolean isSortable(String propertyName)
public List getSortCriteria()
public void setSortCriteria(List criteria)
基礎となるモデルがCollectionModel
でない場合、表ではjava.lang.Comparable
を実装するプロパティのデータが調査されます。これは、小さいデータ・セットには十分でも、CollectionModel
にソート機能を直接挿入するほどの効果はありません。
ユーザーが列をソートすると、表コンポーネントではSortEvent
が生成されます。このイベントには、列のソート基準を戻すgetSortCriteria()
プロパティがあります。表では、基礎となるCollectionModel
のsetSortCriteria
メソッドをコールすることで、このイベントに応答します。登録されているSortListener
インスタンスもコールされます。
ソート可能な列の構成方法は、「ADF Facesの列について」を参照してください。
表の行や列に背景色の代替網掛けを適用するには、バンドを使用します。banding
属性はrow
、column
またはnone
に設定できます。bandingInterval
属性は、同じ背景色を共有する連続した行や列の数を決定します。表に対するこれらのバンド属性は、bandingShade
属性を列に対して設定した場合は無視されます。詳細は、「ADF Facesの列について」を参照してください。
ADF Faces Tableの作成および編集
ADF Faces Tableでの列の使用
データ表内のファセットの使用
ADF Faces Coreライブラリ - <af:table>タグ
Copyright © 1997, 2006, Oracle. All rights reserved.