Thymeleaf实现动态分页功能

第一次使用Thymeleaf着实踩了不少坑,试了好久才试出来的,记录一下

先上Thymeleaf代码

<div style="text-align: center;">
	<ul class="pagination">
		<li><a th:href="@{/listAdmin/}+${pageNum.get(currentPage)-1}">&laquo;</a></li>
		<li class="" th:classappend="${(pageNum.get(currentPage)==i ? active: )}"
			th:each="i:${#numbers.sequence(pageNum.get(startPage),pageNum.get(endPage))}"><a th:href="@{/listAdmin/}+${i}" th:text="${i}">1</a></li>
		<li><a href="#" th:href="@{/listAdmin/}+${pageNum.get(currentPage)+1}">&raquo;</a></li>
	</ul>
	</div>

1 先用th:each把页码数取出来,从动态获取的开始页码到结束页码遍历,这里用到了 #numbers.sequence(num1,num2)这个函数 2 然后是超链接的拼接,用地址 + $ {参数}的方法进行参数的拼接,如参数需要进行运算,直接在${进行运算} 3 th:classappend配合三目运算可轻松修改class样式,起初我写了两个样式然后用if unless来选择,但一直没有效果,不知道为什么

处理动态页码的工具类

//一共多少页
    private int totalPage;
    //当前页码
    private int currentPage;
    //返回的页码数
    private Map<String,Integer> pageNum = new HashMap<>();

    public Map<String,Integer> PageTool(int page, int totalRecord, int size){
        //计算总页数
        totalPage = totalRecord/size;
        if (totalRecord%size!=0){
            totalPage = totalPage + 1;
        }
        if (page<1){
            page = 1;
        }
        if (page>totalPage){
            page = totalPage;
        }
        //处理完成的请求页码
        currentPage = page;
        //在这里计算页码的开始位置和结束位置
        int startPage = 1;
        int endPage = totalPage;
        if (totalPage>10){
            if (page>6){
                startPage = page-5;
                endPage = page+4;
                if(endPage>totalPage){
                    endPage = totalPage;
                }
            }else {
                endPage = 10;
            }
        }
        pageNum.put("startPage",startPage);
        pageNum.put("endPage",endPage);
        pageNum.put("currentPage",currentPage);
        return pageNum;
    }
}

在这里我犯了一个低级错误浪费了很多时间,就是 private Map<String,Integer> pageNum 这句一开始我没有new HashMap<>();分配内存空间,导致往pageNum里面put值的时候一直报空指针异常。 最终结果:

经验分享 程序员 微信小程序 职场和发展