GWT简单寻呼机帮助

时间:2011-01-05 13:24:36

标签: java gwt widget cell

我遇到了我要附加到单元格表的gwt单元寻呼机。我这样设置:

List <ForumMessage> AllMessages=populated from an rpc;
CellTable cellTable = new CellTable  <ForumMessage>();
simplePager = new SimplePager();
cellTable.addColumn(ColumnM);
cellTable.setRowData(0,AllMessages);
simplePager.setDisplay(cellTable);
simplePager.setPageSize(3);

ColumnM已正确定义

但是当显示单元格表时,前三行被正确显示,但是当我按下一行时,没有显示任何行,单元格表就像加载一样。现在,从该页面开始,如果我再次按下,页面就像加载一样。

现在,另一个问题是我可以不断按下,即使只有8行,页面数量也会继续增加

4 个答案:

答案 0 :(得分:15)

当我第一次尝试使用单元格表进行分页时遇到了同样的问题。它的实现方式是,即使在调用setRowSize之后,寻呼机也不会对您的数据集做任何假设。这是以这种方式构建的,因此您可以执行延迟加载。

一旦你知道有多少行数据可用,你需要调用cellTable.setRowCount(int),这将解决你的问题,寻呼机继续前进。现在,要实现分页,您还需要将一个RangeChangeHandler添加到单元格表以设置数据。以下是一些示例代码:

@Override
public void onRangeChange(RangeChangeEvent event)
{
    Range range = cellTable.getVisibleRange();
    int start = range.getStart();
    int length = range.getLength();
    List<ForumMessage> toSet = new ArrayList<ForumMessage>(length);
    for (int i = start; i < start + length && i < AllMessages.size(); i++)
        toSet.add((ForumMessage) AllMessages.get(i));
    cellTable.setRowData(start, toSet);
}

答案 1 :(得分:4)

使用ListDataProvider<T>可能更容易,而不仅仅是提供列表。所以,你的例子是:

// get the list
List <ForumMessage> AllMessages=populated from an rpc;

// create table
CellTable cellTable = new CellTable  <ForumMessage>();
cellTable.addColumn(ColumnM);

// create pager
simplePager = new SimplePager();
simplePager.setDisplay(cellTable);
simplePager.setPageSize(3);

// create data provider
ListDataProvider<ForumMessage> dataProvider = new ListDataProvider<ForumMessage>();
dataProvider.addDataDisplay(cellTable);
dataProvider.setList(AllMessages);

答案 2 :(得分:3)

我遇到了同样的问题,我只需要设置cellTable的页面大小,并删除寻呼机的页面大小,如下所示:

List <ForumMessage> AllMessages=populated from an rpc;
CellTable cellTable = new CellTable  <ForumMessage>();
simplePager = new SimplePager();
cellTable.addColumn(ColumnM);
cellTable.setRowData(0,AllMessages);
simplePager.setDisplay(cellTable);
// set the PageSize of the cellTable
cellTable.setPageSize(3);

答案 3 :(得分:-1)

这里我用GWT 2.5测试 - 我使用AsyncDataProvider:

SimplePager sp = new SimplePager(TextLocation.LEFT, true,
            2 * ct.getPageSize(), true);

AsyncDataProvider<Menu> adp = new AsyncDataProvider<Menu>() {
        @Override
        protected void onRangeChanged(HasData<Menu> display) {
            final Range range = display.getVisibleRange();
            ColumnSortInfo csi = ct.getColumnSortList().get(0);

            String dataStoreName = csi.getColumn().getDataStoreName();
            boolean isAscending = csi.isAscending();

            AAFcms.getAAFService().getAdminMenu(
                    new AdminMenuReq(range, dataStoreName, isAscending),
                    new AsyncCallback<AdminMenuResp>() {
                        @Override
                        public void onFailure(Throwable caught) {
                            System.out.println(caught.getStackTrace());
                            // TODO Auto-generated method stub
                        }

                        @Override
                        public void onSuccess(AdminMenuResp result) {
                            ct.setRowData(range.getStart(),
                                    result.getMenus());
                            ct.setRowCount(result.getRows(), true);
                        }
                    });
        }
    };