ajax4jsf中的ExtendedDataModel
使用名为walk
的方法,如下所示:
public void walk(FacesContext ctx, DataVisitor dv, Range range, Object argument){}
在我的应用程序中多次调用此方法。互联网上的一些主题似乎说后者是由xhtml中的rows="x"
定义的。但是,对我而言range
始终定义为0 (firstRow)
- -1 (getRows)
。
所以我想知道这个range
的定义在哪里,所以我可以弄清楚为什么错误的参数被传递给它。到目前为止,调试和谷歌搜索对我没有帮助。
答案 0 :(得分:0)
范围表示表中显示的数据的可见部分。如果你有paginator,那么paginator会显示哪个页面(=从哪一行到哪一行)的数据。
问题可能是数据表的rows
属性值不正确(例如rows
属性丢失)。
其他地方可能是数据模型的错误实现。数据模型类的对象可用作rich:dataTable
中显示的数据的存储。
真实示例:
public class VSDataModel<RecordType> extends ExtendedDataModel<RecordType> implements Arrangeable {
private final FetchList<RecordType> list;
@Override
public void walk(FacesContext ctx, DataVisitor visitor, Range range, Object obj) {
try {
int firstRow = ((SequenceRange) range).getFirstRow();
int numberOfRows = ((SequenceRange) range).getRows();
if(list == null) {
throw new RuntimeException("Underlying list is null!");
}
if(list.getList() == null || firstRow != list.getFirstRow()) {
list.fetch(firstRow, numberOfRows);
}
for (RecordType elem : list.getList()) {
visitor.process(ctx, list.getPK(elem), obj);
}
} catch(Exception e) {
throw new RuntimeException(e);
}
}
}
它用于Java private VSDataModel<Record> dependentList;
和html
<rich:dataTable value="#{bean.dependentList}" rows="#{referenceData.recordsPerPage}">