现有的解决方案并不会让我感觉不好。只要您引用嵌套表的模型,rowIndex就可以在嵌套表中工作。
<h:dataTable border="1" value="#{nestedDataModel}" var="nested">
<h:column>
<h:dataTable border="1" value="#{nested}" var="item">
<h:column>
<h:outputText value="#{nested.rowIndex}" />
</h:column>
<h:column>
<h:outputText value="#{item}" />
</h:column>
</h:dataTable>
</h:column>
</h:dataTable>
样品型号:
public class NestedDataModel extends DataModel implements Serializable {
private List<List<String>> nestedDataModel = populateModel();
private int index;
private List<List<String>> populateModel() {
List<List<String>> list = new ArrayList<List<String>>();
for(int x=0; x<3; x++) {
List<String> nestedTableData = new ArrayList<String>();
for(int y=0; y<3; y++) {
nestedTableData.add("Foo x="+x+" y="+y);
}
list.add(nestedTableData);
}
return list;
}
@Override
public int getRowCount() {
return nestedDataModel.size();
}
@Override
public Object getRowData() {
List<String> list = nestedDataModel.get(index);
return new ListDataModel(list);
}
@Override
public int getRowIndex() {
return index;
}
@Override
public Object getWrappedData() {
return nestedDataModel;
}
@Override
public boolean isRowAvailable() {
return index >= 0 && index < nestedDataModel.size();
}
@Override
public void setRowIndex(int arg0) {
index = arg0;
}
@Override
public void setWrappedData(Object arg0) {
throw new UnsupportedOperationException();
}
}
嵌套数据表一般应避免 - 如果你不小心(如让他们一种形式的孩子),这可能会导致一个O(N^2 )在提交时将生命周期的每个阶段的子表传递给子表(在生命周期中有6个阶段)。
public class RowCounter implements Serializable {
private transient int row = 0;
public int getRow() {
return ++row;
}
}
配置:
<managed-bean>
<managed-bean-name>rowCounter</managed-bean-name>
<managed-bean-class>tablerows.RowCounter</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
查看:
<f:view>
<h:dataTable border="1" value="#{tableDataBean.tableDataModel}"
var="rowBean">
<h:column>
<h:outputText value="#{rowCounter.row}" />
</h:column>
<h:column>
<h:outputText value="#{rowBean}" />
</h:column>
</h:dataTable>
</f:view>
的东西是模型的外部,你可以在托管bean使用一个简单的计数器
这是可行的,因为豆我它的请求范围和绑定到表单外的只读控件。它不会在嵌套的dataTable中工作,除非您希望行计数器对视图是全局的。但是,我不相信行索引应该是这个观点的一个功能。
对于嵌套的dataTable,最好从行bean提供行索引。如果您决定对数据集进行分页操作,它还可以提供更多控制权。
请参阅[http:// stackoverflow。COM /问题/ 14633008/JSF -2-数据表行索引,而无需-数据模型。这个答案比下面的答案更新 - 也简短而又甜蜜。 – fr13d 2015-10-02 16:12:04