Define your own data table like this:
DataColumn : class represents a single column in a rowset
DataRow: ArrayList<DataColumn> will represent a rowset
DataTable: ArrayList<DataRow> will represent a list of rowset, i.e. a data table
in each class, have those getter/setter ready to provide access to each column/row
assuming you have MyFaces Tomahawk:
then bind the <t:dataTable> to the datatable implementation in your backing bean
<t:dataTable id="mydataTable" border="1" cellspacing="5"
binding="#{myBean.myDataTable}" var="myDT"
rowIndexVar="rowIndex"
rowStyleClass="#{(rowIndex % 2 == 1 ? 'odd' : 'even')}">
<!-- first column -->
<t:column>
<!-- header of first column -->
<f:facet name="header">
<t:selectBooleanCheckbox id="cbxSelectAll"
binding="#{myBean.cbxSelectAll}"
onclick="selectAll(this, 'cbxChecked')" />
</f:facet>
<!-- value of first column -->
<t:selectBooleanCheckbox id="cbxChecked"
value="#{myBean.selectedIds[myDT.myColumnName]}" />
</t:column>
<!-- 2nd column -->
<t:column>
<!-- header of 2nd column -->
<f:facet name="header">
<h:outputText value="2nd Column Header" />
</f:facet>
<!-- value of 2nd column -->
<h:outputText value="#{myDT.myColumnName}" />
</t:column>
...
</t:dataTable>
in the backing bean:
HtmlSelectBooleanCheckbox cbxSelectAll; to keep track if the "select all" checkbox has been checked
Map<Integer, Boolean> selectedIds; Map to keep track which item has been selected
HtmlDataTable myDataTable = new HtmlDataTable();