Помощь простого пейджера GWT
Я застрял с пейджером ячейки 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 правильно определен
но когда отображается таблица ячеек, первые три строки отображаются правильно, но когда я нажимаю next, строки не отображаются, а таблица ячеек как бы загружается. Теперь с этой страницы, если я нажимаю назад, снова страница как бы загружается.
теперь другая проблема заключается в том, что я могу постоянно нажимать next и количество страниц продолжает добавлять, даже если есть только 8 строк
4 ответов
я столкнулся с этой же проблемой, когда впервые попытался использовать таблицу ячеек для подкачки. Он реализован таким образом, что пейджер не делает никаких предположений о вашем наборе данных даже после вызова 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);
}
это может быть проще в использовании 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);
я столкнулся с той же проблемой, и мне нужно было только установить размер страницы таблицы ячеек и удалить размер страницы пейджера следующим образом:
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);
вот мой тест с 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);
}
});
}
};