【问题标题】:Pagination with Spring Boot and Thymeleaf使用 Spring Boot 和 Thymeleaf 进行分页
【发布时间】:2023-03-29 10:50:01
【问题描述】:

我正在寻找一个 CLEAN 示例来说明如何使用 thymeleaf 和 spring boot 完成分页。

有很多例子,但并不完整。

我实际上也在寻找一个实现分页块的示例。例如,如果总页数为 150,当您单击箭头时,我希望页面以 > 的形式显示,下一个页面块将显示为 >

谢谢

【问题讨论】:

  • 分页是在数据库上完成的,分页器是具有适当查询参数的链接的集合。使用 PageRequest 对象
  • 谢谢,能解释一下Spring Boot中PageRequest对象和Page的区别吗?
  • 嗯,页面请求是你想要得到的,例如页码,点击页数,而页面是你实际得到的 - 页码,总结果,页面上的结果(可以比你少预期)页数 - 构建分页器所需的所有好东西。
  • 最重要的是,PageRequest 实现了 Pageable,这可以作为参数直接提供给 Spring Data Repositories 以进行即时数据库分页处理。我忘了提到 Page 拥有实际结果,而不仅仅是元数据

标签: spring spring-boot thymeleaf


【解决方案1】:

我找到了一个使用 Java 数学方法的简单解决方案:Math.max 和 Math.min,如下所示:

    int current = page.getNumber() + 3;
    int begin = Math.max(1, current - 5);
    int end = Math.min(begin + 6, page.getTotalPages());

然后我将这些变量传递给 thymeleaf #numbers.sequence,如下所示:

                <li class="page-item"
                th:each="i : ${#numbers.sequence(beginIndex, endIndex)} ">

                <a th:href="@{/jobs(p=${i})}" th:text="${i}" class="nav-link"
                th:classappend="${currentPage}==${i}?'activepagenumber':''"></a>
                </li>

【讨论】:

    【解决方案2】:

    添加到 Issmeil B. 答案,以防万一你想计算页面上的开始和结束索引,你可以调用 Math 类中的静态类。例如

    <div class="paginate-pagination"
         th:with="current=${page.number + 3},
         beginIndex=${T(java.lang.Math).max(0,current-5)},
         endIndex=${T(java.lang.Math).min(begin + 6 , page.totalPages-1)}">
    
        ....
    
    </div>
    

    【讨论】:

    • 不错;但是,在控制器上计算索引并将它们插入模型映射可能更干净
    猜你喜欢
    • 2018-11-01
    • 2017-09-13
    • 2018-06-16
    • 2015-07-29
    • 2017-09-10
    • 2018-09-19
    • 1970-01-01
    • 2018-05-18
    • 1970-01-01
    相关资源
    最近更新 更多