【发布时间】:2015-10-27 10:54:26
【问题描述】:
在我的许多页面上,我有几个选项可以对一长串结果进行排序或过滤。
当有人翻阅数据时,我希望正确保留这些选择。例如:
- 开始查看所有工单的列表。 (
/tickets) - 搜索所有票,例如“foo”。 (
/tickets?query=foo) - 转到下一页。 (
/tickets?query=foo&page=2) - 请参阅“foo”之类的工单的下一页,而不是“所有工单”的第二页。 (例如不是
/tickets?page=2)
在 JSP 中,我想出了这样的解决方案:
<c:if test="${page.hasNext()}">
<spring:url value="" var="nextLink">
<c:forEach items="${param}" var="curParam">
<c:if test="${curParam.key != 'page'}">
<spring:param name="${curParam.key}" value="${curParam.value}"/>
</c:if>
</c:forEach>
<spring:param name="page" value="${page.nextPageable().pageNumber}"/>
</spring:url>
<li>
<a href="${nextLink}" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
</c:if>
这基本上构造了一个指向与当前页面相同的路径的新 URL,但在其查询参数中添加/替换了“路径”参数。
它在 JSP 中相当难看,但我看不到在 Thymeleaf 中真正做到这一点的方法?
或者,也许有一些更好的方法可以使用一些我还没有遇到过的 Spring 或 Thymeleaf 功能?
我希望有一个简洁的 Thymeleaf 片段,我可以在需要分页的任何地方重复使用。到目前为止,这就是我所拥有的,但它最终会丢失“查询”参数等。(我不想在这里硬编码查询参数,因为这会限制这个分页代码的可重用性)
<li th:if="${page.hasNext()}">
<a href="pagination.html" th:href="@{''(page=${page.nextPageable().pageNumber})}" aria-label="next">
<span aria-hidden="true">»</span>
</a>
</li>
【问题讨论】:
-
您是否查看过已经存在的项目,例如dandelion.github.io/components/datatables
-
我遇到了它所基于的 jQuery 插件,但不是这个很好的包装器......我一定会看看,但这看起来像是另一层新东西添加到组合中......(至少一对新的 Thymeleaf 方言)
-
另外,请给出一个答案,这样我可以接受它,如果它适合我的话,给你一些代表:)
标签: spring-mvc pagination thymeleaf