GWT Simple Pager Справка - PullRequest
       21

GWT Simple Pager Справка

8 голосов
/ 05 января 2011

Я застрял с пейджером 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 ]

15 голосов
/ 06 января 2011

Я столкнулся с той же проблемой, когда впервые попытался использовать таблицу ячеек для подкачки. Он реализован таким образом, что пейджер не делает никаких предположений о вашем наборе данных даже после вызова 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);
}
4 голосов
/ 11 октября 2011

Может быть проще использовать 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);
3 голосов
/ 03 февраля 2012

Я столкнулся с той же проблемой, и мне нужно было только установить размер страницы 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);
0 голосов
/ 18 января 2013

Вот мой тест с 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);
                        }
                    });
        }
    };
...