我想分页我的结果。首先,我尝试了经典的方法并且它有效,我的dataView检索包含数据库结果的列表,并显示我想要的每页结果数。 (看起来像这样<<<<<<<<<<< 1>>>>>)
final DataView<RequestEntity> dataView = new MyDataView();
dataView.setItemsPerPage(10);
linksContainer.add(new PagingNavigator("pageNavigator", dataView));
<a wicket:id="pageNavigator"></a>
现在我只想在单击下一页时(从延迟加载/延迟分页的类型)检索数据库中的数据。所以我像这样修改了我的DAOObject: query.setMaxResults(entriesPerPage);
这是与之前相同的查询,但这次它将占用我想要的每页结果数量。 并且它有效,它每页检索尽可能多的条目。问题是我不知道如何显示另一页。它只显示一个页面,其中包含查询中的第一个条目。 (看起来像这样&lt;&lt; 1&gt;&gt;)
我的想法是使用链接而不是AjaxPagingNavigator来显示从1到5的页面,当单击链接时,将执行查询。我不认为我的想法很好。你能帮助我吗?我希望我的问题不是太愚蠢。 感谢
答案 0 :(得分:2)
完成!我需要做的就是创建了解所有内容的IDataProvider。如果你创建它,你不必担心大小(关于欺骗它以显示更多页面)。
IDataProvider dataProvider = new IDataProvider<RequestEntity>() {
RequestEntityDAOExtra requestEntityDAOExtra =
((MyApp) getApplication()).getMyRequestDAO();
@Override
public Iterator<? extends RequestEntity> iterator(long first, long count) {
List<RequestEntity> entitiesByDomainList = requestEntityDAOExtra.getEntityByDomain(
domainInput.getModelObject(), (int) count, (int) first);
return entitiesByDomainList.iterator();
}
@Override
public long size() {
return requestEntityDAOExtra.getEntityByDomainCount(domainInput.getModelObject());
}
@Override
public IModel<RequestEntity> model(final RequestEntity requestEntity) {
return new LoadableDetachableModel() {
@Override
protected RequestEntity load() {
return requestEntity;
}
};
}
@Override
public void detach() {
}
};
final DataView<RequestEntity> dataView = new MyDataView(dataProvider, 10);
private class MyDataView extends DataView<RequestEntity> {
public MyDataView(IDataProvider dataProvider, int i) {
super("linksList", dataProvider, i);
}
@Override
protected void populateItem(final Item<RequestEntity> item) {
.....
}
}