Ajax 分页检票口。单击下一页时从数据库中检索新数据
Ajax Pagination Wicket. Retrieve new data from db when next page is clicked
我想对结果进行分页。首先,我尝试了经典方法并且它起作用了,我的 dataView 从数据库中检索包含结果的列表,并显示每页我想要的结果数。
(看起来像这样 << <1 2 3 4 5> >> )
final DataView<RequestEntity> dataView = new MyDataView();
dataView.setItemsPerPage(10);
linksContainer.add(new PagingNavigator("pageNavigator", dataView));
<a wicket:id="pageNavigator"></a>
现在我只想在单击下一页时从数据库中检索数据(一种延迟加载/延迟分页)。所以我像这样修改了我的 DAOObject:
query.setMaxResults(entriesPerPage);
这是与之前相同的查询,但这次它将采用我想要的每页结果量。
它有效,它每页检索尽可能多的条目。问题是我不知道如何显示另一个页面。它只显示一个页面,其中包含查询中的第一个条目。 (看起来像这样 << 1 >>)
我的想法是使用 links 而不是 AjaxPagingNavigator 来显示从 1 到 5 的页面,当单击 link 时执行查询。我不认为我的想法是好的。你能帮助我吗?我希望我的问题不是太愚蠢。
谢谢
完成!我需要做的就是创建无所不知的 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) {
.....
}
}
我想对结果进行分页。首先,我尝试了经典方法并且它起作用了,我的 dataView 从数据库中检索包含结果的列表,并显示每页我想要的结果数。 (看起来像这样 << <1 2 3 4 5> >> )
final DataView<RequestEntity> dataView = new MyDataView();
dataView.setItemsPerPage(10);
linksContainer.add(new PagingNavigator("pageNavigator", dataView));
<a wicket:id="pageNavigator"></a>
现在我只想在单击下一页时从数据库中检索数据(一种延迟加载/延迟分页)。所以我像这样修改了我的 DAOObject: query.setMaxResults(entriesPerPage);
这是与之前相同的查询,但这次它将采用我想要的每页结果量。 它有效,它每页检索尽可能多的条目。问题是我不知道如何显示另一个页面。它只显示一个页面,其中包含查询中的第一个条目。 (看起来像这样 << 1 >>)
我的想法是使用 links 而不是 AjaxPagingNavigator 来显示从 1 到 5 的页面,当单击 link 时执行查询。我不认为我的想法是好的。你能帮助我吗?我希望我的问题不是太愚蠢。 谢谢
完成!我需要做的就是创建无所不知的 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) {
.....
}
}