当前位置:   article > 正文

thymeleaf 中 通用的分页方法_thymeleaf分页

thymeleaf分页

在项目中调用api后将数据分页显示,很多的插件都是和数据库相关的使用数据库的 limit 特性 像  pagehelper、Spring Data Jpa这些插件,在这里不适合。这里介绍一种不用后端实现的假分页。主要是对查询后的集合进行下标截取。

1.工具类代码

  1. import java.util.List;
  2. // 分页工具类
  3. public class PageUtil<T> {
  4. // 对象记录结果集
  5. private List<T> list;
  6. // 总记录数
  7. private int total = 0;
  8. // 每页显示记录数
  9. private int limit = 20;
  10. // 总页数
  11. private int pages = 1;
  12. // 当前页
  13. private int pageNumber = 1;
  14. // 是否为第一页
  15. private boolean isFirstPage = false;
  16. // 是否为最后一页
  17. private boolean isLastPage = false;
  18. // 是否有前一页
  19. private boolean hasPreviousPage = false;
  20. // 是否有下一页
  21. private boolean hasNextPage = false;
  22. // 导航页码数
  23. private int navigatePages = 8;
  24. // 所有导航页号
  25. private int[] navigatePageNumbers;
  26. // 尾页
  27. private int lastPage = 0 ;
  28. // 首页
  29. private int firstPage = 1 ;
  30. // 上一页
  31. private int prePage = 0;
  32. // 下一页
  33. private int nextPage = 0;
  34. public PageUtil(int pageNumber, int limit, List<T> list) {
  35. init(list, pageNumber, limit);
  36. }
  37. private void init(List<T> list, int pageNumber, int limit){
  38. //设置基本参数
  39. this.list = list;
  40. this.total = list.size();
  41. this.limit = limit;
  42. this.pages = (this.total-1)/this.limit+1;
  43. this.lastPage = pages;
  44. this.firstPage = 1;
  45. this.prePage = pageNumber-1;
  46. this.nextPage = pageNumber+1;
  47. //根据输入可能错误的当前号码进行自动纠正
  48. if(pageNumber<1){
  49. this.pageNumber=1;
  50. }else if(pageNumber>this.pages){
  51. this.pageNumber=this.pages;
  52. }else{
  53. this.pageNumber=pageNumber;
  54. }
  55. //基本参数设定之后进行导航页面的计算
  56. calcNavigatePageNumbers();
  57. //以及页面边界的判定
  58. judgePageBoudary();
  59. }
  60. /**
  61. * 计算导航页
  62. */
  63. private void calcNavigatePageNumbers(){
  64. //当总页数小于或等于导航页码数时
  65. if(pages<=navigatePages){
  66. navigatePageNumbers=new int[pages];
  67. for(int i=0;i<pages;i++){
  68. navigatePageNumbers[i]=i+1;
  69. }
  70. }else{ //当总页数大于导航页码数时
  71. navigatePageNumbers=new int[navigatePages];
  72. int startNum=pageNumber-navigatePages/2;
  73. int endNum=pageNumber+navigatePages/2;
  74. if(startNum<1){
  75. startNum=1;
  76. //(最前navPageCount页
  77. for(int i=0;i<navigatePages;i++){
  78. navigatePageNumbers[i]=startNum++;
  79. }
  80. }else if(endNum>pages){
  81. endNum=pages;
  82. //最后navPageCount页
  83. for(int i=navigatePages-1;i>=0;i--){
  84. navigatePageNumbers[i]=endNum--;
  85. }
  86. }else{
  87. //所有中间页
  88. for(int i=0;i<navigatePages;i++){
  89. navigatePageNumbers[i]=startNum++;
  90. }
  91. }
  92. }
  93. }
  94. /**
  95. * 判定页面边界
  96. */
  97. private void judgePageBoudary(){
  98. isFirstPage = pageNumber == 1;
  99. isLastPage = pageNumber == pages && pageNumber!=1;
  100. hasPreviousPage = pageNumber!=1;
  101. hasNextPage = pageNumber!=pages;
  102. }
  103. /**
  104. * 得到当前页的内容
  105. * @return {List}
  106. */
  107. public List<T> getList() {
  108. int endIndex = total;
  109. if(pageNumber*limit <= total){
  110. endIndex = pageNumber*limit;
  111. }
  112. List<T> pagelist = list.subList((pageNumber-1)*limit, endIndex);
  113. return pagelist;
  114. }
  115. public int getLastPage() {
  116. return lastPage;
  117. }
  118. public void setLastPage(int lastPage) {
  119. this.lastPage = lastPage;
  120. }
  121. public int getFirstPage() {
  122. return firstPage;
  123. }
  124. public void setFirstPage(int firstPage) {
  125. this.firstPage = firstPage;
  126. }
  127. public int getPrePage() {
  128. return prePage;
  129. }
  130. public void setPrePage(int prePage) {
  131. this.prePage = prePage;
  132. }
  133. public int getNextPage() {
  134. return nextPage;
  135. }
  136. public void setNextPage(int nextPage) {
  137. this.nextPage = nextPage;
  138. }
  139. /**
  140. * 得到记录总数
  141. * @return {int}
  142. */
  143. public int getTotal() {
  144. return total;
  145. }
  146. /**
  147. * 得到每页显示多少条记录
  148. * @return {int}
  149. */
  150. public int getLimit() {
  151. return limit;
  152. }
  153. /**
  154. * 得到页面总数
  155. * @return {int}
  156. */
  157. public int getPages() {
  158. return pages;
  159. }
  160. /**
  161. * 得到当前页号
  162. * @return {int}
  163. */
  164. public int getPageNumber() {
  165. return pageNumber;
  166. }
  167. /**
  168. * 得到所有导航页号
  169. * @return {int[]}
  170. */
  171. public int[] getNavigatePageNumbers() {
  172. return navigatePageNumbers;
  173. }
  174. public boolean isFirstPage() {
  175. return isFirstPage;
  176. }
  177. public boolean isLastPage() {
  178. return isLastPage;
  179. }
  180. public boolean hasPreviousPage() {
  181. return hasPreviousPage;
  182. }
  183. public boolean hasNextPage() {
  184. return hasNextPage;
  185. }
  186. }

2.业务处理中的使用

  1. /**
  2. * 进入用户列表首页
  3. * @param model
  4. * @param map
  5. * key: currentPage 当前页码
  6. * @return 跳转至列表页面
  7. * @throws Exception
  8. */
  9. @RequestMapping("/findUserList.do")
  10. public String findUserList(@RequestParam Map<String, String> map, Model model) throws Exception {
  11. if (map.size() == 0 || map.get("currentPage").isEmpty()) {
  12. map.put("currentPage", "0");
  13. }
  14. // 查询用户列表 及设置分页信息
  15. List<UserDTO> userDTOList = userServiceImpl.findUserDTOList();
  16. // 参数为当前页码、每页显示条数、查询的列表集合
  17. Pager pageInfo = new Pager(Integer.valueOf(map.get("currentPage")), 20, userDTOList);
  18. model.addAttribute("userDTOList", pageInfo.getList());
  19. model.addAttribute("pageInfo", pageInfo);
  20. return "findUserDTOList";
  21. }

3. 前台页面展示

  1. <table class="table">
  2. <tr th:each="flpcDTO : ${userDTOList} ">
  3. <td></td>
  4. </tr>
  5. </table>
  6. <div align="center">
  7. <a class="allpage"><b th:text="'共 '+ ${pageInfo.getPages()}+ ' 页'"></b></a>
  8. <a th:href="@{/findUserList.do(currentPage=${pageInfo.getFirstPage()})}" >首页</a>
  9. <a th:if="${pageInfo.hasPreviousPage()} == true" th:href="@{/findUserList.do(currentPage=${pageInfo.getPrePage()})}" >上一页</a>
  10. <a th:href="@{'/findUserList.do?currentPage=' + ${i}}" th:each="i :${#numbers.sequence(pageInfo.firstPage, pageInfo.lastPage)}" th:text=" ${i}" th:class="${pageInfo.getPageNumber() == i}? 'page-item active' :' page-item' "></a>
  11. <a th:if="${pageInfo.hasNextPage()} == true" th:href="@{/findUserList.do(currentPage=${pageInfo.getNextPage()})}" >下一页</a>
  12. <a th:href="@{/findUserList.do(currentPage=${pageInfo.getLastPage()})}" >尾页</a>
  13. </div>

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/119644?site
推荐阅读
相关标签
  

闽ICP备14008679号