【问题标题】:Where is the SequenceRange from the walk-method from ExtendedDataModel defined?ExtendedDataModel 的 walk-method 中的 SequenceRange 在哪里定义?
【发布时间】:2016-05-20 19:13:51
【问题描述】:

来自 ajax4jsf 的 ExtendedDataModel 使用了一个名为 walk 的方法,如下所示:

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

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

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

【问题讨论】:

    标签: ajax4jsf


    【解决方案1】:

    范围表示表格中显示的数据的可见部分。如果您有分页器,则分页器会显示呈现哪一页(= 从哪一行到哪一行)数据。

    问题可能在于数据表的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);
            }
        }
    }
    

    在Javaprivate VSDataModel&lt;Record&gt; dependentList;和html中使用 &lt;rich:dataTable value="#{bean.dependentList}" rows="#{referenceData.recordsPerPage}"&gt;

    【讨论】:

    • 感谢您的回复。我已经做了很多实验,并且一切正常(我也会发布我的另一个问题的答案)。我仍然想知道何时准确调用 walk 方法;我注意到它被调用了几次,但我不确定确切的时间。如果您知道,您能否详细说明一下?我觉得每次绘制 table 时都会调用它,但这并不能解释为什么它会快速连续调用 3 次。
    • 是的,RichFaces 每次重新绘制 dataTable 时都会调用它。
    猜你喜欢
    • 2013-04-03
    • 2013-04-09
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    • 2012-03-15
    • 2020-08-18
    相关资源
    最近更新 更多