Ajax Pagination Wicket。单击下一页时从db检索新数据

时间:2015-08-18 14:19:01

标签: ajax pagination navigation wicket-6

我想分页我的结果。首先,我尝试了经典的方法并且它有效,我的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的页面,当单击链接时,将执行查询。我不认为我的想法很好。你能帮助我吗?我希望我的问题不是太愚蠢。 感谢

1 个答案:

答案 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) {
        .....
    }
}