GWT - 具有简单寻呼机问题的小区表格

时间:2011-12-05 20:47:57

标签: gwt

单元格表分页表现得很奇怪。从GWT查看示例 http://gwt.google.com/samples/Showcase/Showcase.html#!CwCellTable

此处的页面大小定义为15.这是问题 -

  1. 点击最后​​一页按钮。显示了241到250的结果。
  2. 现在点击上一个按钮 - 显示226-240的结果。
  3. 现在点击下一步按钮(这就是问题所在)。它显示了236到250的结果。而它应该显示241-250。
  4. 我在项目中遇到同样的问题。 有没有解决这个问题?

5 个答案:

答案 0 :(得分:12)

这是known, reported bug。如该错误报告中所述,有一种解决方法:

  

作为解决方法,可以将SimplePager子类化以覆盖它   方法setPageStart中定义的行为:

@Override
public void setPageStart(int index) {
    if (this.getDisplay() != null) {
        Range range = this.getDisplay().getVisibleRange();
        int pageSize = range.getLength();
//      if (isRangeLimited && display.isRowCountExact()) {
//          index = Math.min(index, display.getRowCount() - pageSize);
//      }
        index = Math.max(0, index);
        if (index != range.getStart()) {
            this.getDisplay().setVisibleRange(index, pageSize);
        }
    }
}

答案 1 :(得分:8)

进行寻呼机初始化时,必须设置:

pager.setRangeLimited(false);

此方法设置页面范围是否应限制为实际数据大小。

如果为true,则会调整所有操作,以便页面上始终显示数据。

答案 2 :(得分:1)

问题是,CellTable类旨在根据给定的页面大小容纳数据。因此问题。我期待这可能会在GWT 2.4版本中修复。您可以在GWT网站上记录此问题,并希望在下一版本中修复此问题。

@

答案 3 :(得分:1)

覆盖hasNextPage(),如下所示。

pager = new SimplePager(TextLocation.CENTER,(SimplePager.Resources) GWT.create(Resources.class), false,10, true){
                    @Override
                    public boolean hasNextPage() {
                        if(this.getPage()<(this.getPageCount()-1)) {
                            return true;
                        }
                        return false;
                    }
                };

答案 4 :(得分:0)

使用nextPage方法创建simplepager的子类。

public class CustomSimplePager extends SimplePager {

     @Override
     public void nextPage() {
           // TODO Auto-generated method stub
           HasRows display = getDisplay();
           if (display != null) {
           Range range = display.getVisibleRange();
                if (hasNextPage())
                      setPageStart(range.getStart() + range.getLength());
           }
     }
 }

并设置pager.setRangeLimited(false);