来自ExtendedDataModel的walk-method定义的SequenceRange在哪里?

时间:2016-05-20 19:13:52

标签: ajax4jsf

ajax4jsf中的ExtendedDataModel使用名为walk的方法,如下所示:

public void walk(FacesContext ctx, DataVisitor dv, Range range, Object argument){}

在我的应用程序中多次调用此方法。互联网上的一些主题似乎说后者是由xhtml中的rows="x"定义的。但是,对我而言range始终定义为0 (firstRow) - -1 (getRows)

所以我想知道这个range的定义在哪里,所以我可以弄清楚为什么错误的参数被传递给它。到目前为止,调试和谷歌搜索对我没有帮助。

1 个答案:

答案 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}">