JSPページにデータ表を作成するには、UIData
コンポーネントに対してdataTable
タグを使用します。このコンポーネントは、戻された現在のデータに基づいて、行を動的に追加または削除できるため便利です。UIData
コンポーネントによって、データ項目のコレクションが反復され、各項目が使用可能になります。dataTable
タグ内で使用できるのは、column
タグのみです。UIData
コンポーネントでデータが反復されると、行ごとにcolumn
タグが処理されます。したがって、dataTable
タグでは、データのコレクションへの値バインディング、表で使用されるスタイル、および行を表すために使用される変数などが処理されます。column
タグには、ヘッダーとフッターのfacet
タグ、および表セル内の実際のデータを表示するために必要な関連する値バインディングが含まれたコンポーネント・タグが含まれています。列には、任意の数の他のコンポーネント・タグを含めることができます。
データのコレクションを表示するのではなく、標準のHTML表に類似した表を作成する場合は、「パネル・グリッドについて」を参照してください。
たとえば、従業員の名前、部門および電話番号を表示するデータ表を作成する場合、JSPのコードは次のようになります。
<h:dataTable rows="5" value="#{employeeTable.employees}" var="currentRow"
<h:column>
<f:facet name="header">
<h:outputText value="Name"/>
</f:facet>
<h:commandLink action="#{employeeBB.editLinkAction}">
<h:outputText value="#{currentRow.name}"/>
</h:commandLink>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Department"/>
</f:facet>
<h:outputText value="#{currentRow.department}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Phone"/>
</f:facet>
<h:outputText value="#{currentRow.phone}"/>
</h:column>
</h:dataTable>
rows
属性は、一度に表示されるデータ・セットの行数を決定します。この属性は、Webページに現在表示されている行セットを管理するためのfirst
タグ属性と併用できます。JSFでは、大規模なデータ・セット全体のページを変更するコンポーネントは提供されていません。したがって、独自のコンポーネントを作成するか、データ・コレクション全体を移動する他の方法を開発する必要があります。
value
属性を使用して、データを保持しているマネージドBeanに表を値バインドします。バインド先は、次のいずれかです。
java.util.List
のインスタンス
java.sql.ResultSet
のインスタンス
javax.servlet.jsp.jstl.sql.ResultSet
のインスタンス
javax.sql.RowSet
のインスタンス
javax.faces.model.DataModel
のインスタンス
表が、オブジェクト、リスト、結果セットまたはJSTL結果オブジェクトにバインドされると、dataTable
タグによって、次のリストに示す、javax.faces.model.DataModel
を拡張するモデル内にオブジェクトがラップされます。
ArrayDataModel
ListDataModel
ResultDataModel
ResultSetDataModel
ScalarDataModel
dataTable
タグでは、表のバインド先のオブジェクトと直接対話するかわりに、これらのクラスが使用されます。
前述の例では、表はemployeeTable
マネージドBeanにバインドされます。このBeanでは、employee
プロパティを使用してデータのコレクションが提供されます。
var
属性は、現在の行にアクセスする方法を提供します。前述の例では、変数としてcurrentRow
を使用することによって、従業員名の表示に使用されるoutputText
コンポーネント・タグでは、その値として#{currentRow.name}
を使用できます。この式の2番目の部分がその列に表示されるBeanのプロパティです。
facet
タグを使用して、ヘッダーとフッターの両方を挿入します。facet
タグでは、コレクションの反復から導出されるのではなく、1回のみ表示されるテキストが提供されます。列の内容を示すには、他のコンポーネント・タグを挿入します。これらのコンポーネントは、表がバインドされるBeanのプロパティにバインドできます。前述の例では、Name
プロパティのデータを表示する列に2つのコンポーネント・タグがあります。1つは、commandLink
タグです。このタグは、名前を、employeeBB
バッキングBeanのアクション・メソッドにバインドされるリンクにします。名前のテキストはoutputText
タグを使用して表示され、その値はemployee
Beanのname
プロパティにバインドされています。ただし、Beanのプロパティに直接バインドするのではなく、dataTable
タグに設定された変数(この場合はcurrentRow
)にバインドします。この変数によって、各行にdataTable
の反復から行セットが表示されるようになります。
データ表の作成および編集
データ表内の列の使用
データ表内のファセットの使用
JSF HTMLライブラリ - <h:dataTable>タグ
Copyright © 1997, 2007, Oracle. All rights reserved.