【问题标题】:Richfaces extendeddatatable and datascroller - rendering order on page resetRichfaces extendeddatatable 和 datascroller - 页面重置时的渲染顺序
【发布时间】:2014-09-01 08:30:10
【问题描述】:

我有一个带有数据滚动器的 Richfaces 扩展数据表。我们编写了一个自己的类来扩展 ExtendeddataModel。

一切正常,直到出现以下情况:

  1. 转到数据滚动条的最后一页
  2. 使用任何导致数据量较小的过滤器,这样最后一页就不再存在了

结果:datascroller“跳转”到右侧页面,但datatable仍然显示为空

经过一些调试,我发现在数据滚动器写入日志之前调用了 ExtendeddataModel-Implementation 的“walk()”方法:

The requested page isn't found in the model. Paging  is reset to page... 

我们对新数据使用过滤、排序、推送机制……所以这是一种复杂的环境,我不能在这里真正发布,但我会尝试指出最重要的部分。

<h:selectManyCheckbox value=#{controller.filter}>
    <f:selectItems value="#{controller.filterOptions} />
    <a4j:ajax render="table scroller" />
</h:selectManyCheckbox

<rich:extendeddatatable id="table" ... />

<rich:dataScroller for="table" id="scroller" renderIfSinglePage="false" 
    page="#{controller.page}"

将 render="table" 添加到 datascroller 没有帮助。唯一有帮助的是将渲染放入两个不同的请求中,因此首先只渲染 datascroller,然后渲染数据表。

有没有办法在没有 2 个请求的情况下做到这一点?我可以强制渲染顺序吗?还是我只是错过了 dataScroller/数据表的配置中的某些内容,以便在重置滚动条后呈现它...

【问题讨论】:

    标签: richfaces


    【解决方案1】:

    我可以通过在 java 代码中手动重置页面来解决这个问题。

    具体来说,我将 Extendeddatamodel 的 walk(...) 方法更改如下:

    @Override
    public void walk(FacesContext context, DataVisitor visitor, 
        Range range, Object argument){
    
        SequenceRange sequenceRange = (SequenceRange) range;
    
        int firstRow = sequenceRage.getFirstRow();
        int rows = myDB.getCount();
    
        if(firstRow > rows){
            int fullPages = rows / ROWS_PER_PAGE;
            int rest = rows % ROWS_PER_PAGE;
    
            if(rest == 0){
                firstRow = rows - ROWS_PER_PAGE;
                this.setPage(fullPages);
            }else{
                firstRow = rows - rest;
                this.setPage(fullPages + 1);
            }
        }
    
    ...
     // visitor.process(...); stuff
    ...
    
     }
    

    我仍然相信这正是数据滚动器本身应该做的事情,但至少我目前的问题得到了解决。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-11
      • 1970-01-01
      • 2015-02-07
      • 1970-01-01
      • 2011-03-12
      • 2011-04-30
      • 2011-07-23
      • 2012-02-22
      相关资源
      最近更新 更多