I've implemented grid view with data provider which requires only iterator, without size information - its called IterableGridView
Here is the code: https://github.com/maciejmiklas/cyclop/tree/master/cyclop-wicket-components
Iterable Grid View is based on Wicket's GridView
, however it does not work with IDataProvider
but with
IterableDataProvider
. This new data provider relies only on plain java iterator - size information is not needed, and there is also no need to create range iterators for each page.
final List<String> myGridData = new ArrayList<>();
myGridData.add("value 1");
myGridData.add("value 2");
IterableDataProvider<String> iterableDataProvider = new IterableDataProvider<String>(10) {
@Override
protected Iterator<String> iterator() {
return myGridData.iterator();
}
@Override
public IModel<String> model(String s) {
return Model.of(s);
}
@Override
public void detach() {
}
};
IterableGridView<String> myGrid = new IterableGridView<String>("myGrid", iterableDataProvider) {
@Override
protected void populateEmptyItem(Item<String> item) {
item.add(new Label("myValue"));
}
@Override
protected void populateItem(Item<String> item) {
item.add(new Label("myValue", item.getModelObject()));
}
};
add(myGrid);
myGrid.setItemsPerPage(10);
// you have to use custom pager and not AjaxPagingNavigator
IterablePagingNavigator pager = new IterablePagingNavigator("rowNamesListPager", rowNamesList);
resultTable.add(pager);