首页 > 解决方案 > 当列表分页的大小输入设置为大于 15 时,Spring Data PagedListHolder 没有返回正确的 PageSize,为什么?

问题描述

我正在尝试使用PagedListHolderSpring 实现 List 数据的分页,但是当设置输入大小大于 15 时,它现在返回预期的输出。

private List<WorklistResponse> getPaginatedResponseResult(List<WorklistResponse> worklistResponse, FilterRequest filterRequest) {
    PagedListHolder<WorklistResponse> pagedListHolder = new PagedListHolder<WorklistResponse>();

    pagedListHolder.setSource(worklistResponse);
    pagedListHolder.setPage(filterRequest.getCurrentPage());// 1
    pagedListHolder.setPageSize(filterRequest.getPageSize());// 29

    System.out.println(worklistResponse.size());//total input list size 30
    System.out.println(pagedListHolder.getPageSize());  // after setting size 29
    System.out.println(pagedListHolder.getPageList().size());// actual page element size result is 1 which is not correct ,it should be 29

    return pagedListHolder.getPageList();
}

在 classPagedListHolder中,以下方法会影响结果:

public List<E> getPageList() {
    return this.getSource().subList(this.getFirstElementOnPage(), this.getLastElementOnPage() + 1);
}

如何为任何输入获得正确的页面大小?

标签: javaspringspring-bootrestspring-data-jpa

解决方案


您有 30 条记录,页面 1 和页面大小 29 返回 1 条记录,因为: PagedListHolder是一个简单的状态持有者,用于处理对象列表,将它们分成页面。页码从 0 开始。

如果在结构上您的第一页是 1,则在提交页码时减去 1。例如:

pagedListHolder.setPage(filterRequest.getCurrentPage() - 1);

推荐阅读