今天使用Thymeleaf前端模板,在做分页条件查询的时候,出现了传参问题,就此记录一下,希望能帮助到正在看本篇文章的你
下面是分页中单击下一页的源代码
<a th:if="${page.hasNextPage}" th:href="@{'/players/page/getAll/'+${page.nextPage}+'?pName='${session.likeName}}">下一页</a>
大家都知道在使用**@{}中如果需要使用上下文中的信息时@{}**大括号中的路径是需要使用单引号包括起来,上下文路径单独使用 + 号拼接,路径中page是后端Model传递过来的分页数据,后面我需要传参第一次查询后的模糊数据,以保证分页查询的条件不丢失将数据储存在session中,每次查询后都会覆盖此session;
问题就出在这里吗,当我用**‘?pName=’${session.likeName}**问号拼接数据后
后端对应的方法
可以看出并不是我们想要的结果
当我们模糊查询过之后
点击下一页的超链接是需要这种效果
解决办法
Thymleaf本身有配套传参的规则
地址栏中带问号:
单参数:
<a th:if="${page.hasNextPage}" th:href="@{'/players/page/getAll/1'(pName=${session.likeName})}">下一页</a>
多参数:
<a th:if="${page.hasNextPage}" th:href="@{'/players/page/getAll/1'(pName=${session.likeName},cId=${session.cId})}">下一页</a>
RESTFUL风格:
在这里插入代码单参数:
<a th:if="${page.hasNextPage}" th:href="@{'/players/page/getAll/1/{pName}'(pName=${session.likeName})}">下一页</a>
多参数:
<a th:if="${page.hasNextPage}" th:href="@{'/players/page/getAll/1/{pName}/{cId}'(pName=${session.likeName},cId=${session.cId})}">下一页</a>片
我这里使用的是带问号的传参方式
<a th:if="${page.hasNextPage}" th:href="@{'/players/page/getAll/'+${session.nextPage}(pName=${session.likeName})}">下一页</a>
一定要仔细检查路径 ’ '," ",/,单引号双引号斜杆是最不引人注意的,一个小细节就要查好久;
还有在使用的时候在**@{}大括号结尾处如有使用上下文中的信息,也就是${}**,在它括回来的}会直接替换掉@{}的回括号}。
完整分页可以看下,有问题可以留下评论
<div>
<p>
<a th:if="${page.hasPreviousPage}" th:href="@{/players/page/getAll/1(pName=${session.likeName})}">首页</a>
<a th:if="${page.hasPreviousPage}" th:href="@{'/players/page/getAll/'+${page.prePage}(pName=${session.likeName})}">上一页</a>
<a th:each="num : ${page.navigatepageNums}" th:href="@{'/players/page/getAll/'+${num}(pName=${session.likeName})}" th:text=" ${num} "></a>
<a th:if="${page.hasNextPage}" th:href="@{'/players/page/getAll/'+${page.pages}(pName=${session.likeName})}">末页</a>
<a th:if="${page.hasNextPage}" th:href="@{'/players/page/getAll/'+${session.nextPage}(pName=${session.likeName})}">下一页</a>
<span th:text="'第'+${page.pageNum}+'页'"></span>
<span th:text="'共'+${page.pages}+'页'"></span>
</p>
</div>
``