如何从Pageable到Thymeleaf链接属性进行排序?

时间:2018-04-24 15:16:45

标签: spring spring-mvc spring-data thymeleaf

我想在我的文档中添加分页链接。

<a class="item"
    th:href="@{/works(
        page=${pageNum},
        size=${page.pageable.getPageSize()},
        sort=${page.pageable.sort})}"
    th:text="${pageNum}"
    th:classappend="${page.pageable.getPageNumber() eq pageNum} ? active"></a>

page是保存内容和Page对象的Pageable对象。

问题是sort=${page.pageable.sort}。它创建“sort = title:ASC”。但是我需要格式“sort = title,asc”,如Spring Data Docs的this chapter中所述。我认为有一种比自己构建所需字符串更好的方法。我认为这是一个常见的问题。

创建可用排序参数字符串的最佳方法是什么?

我不需要显示here

的静态行为
  • 春季5
  • Thymeleaf 3

1 个答案:

答案 0 :(得分:0)

假设您的Pageable中有PageController,那么您可以通过调用其Sort方法来访问其中的getSort()。知道SortIterable<Order>后,您应该能够遍历Order个实例-每个实例包含一对(属性,方向)-并构建一个任意的sort字符串。这是一个使用Java 8流和lambda的示例,但是当然可以强制执行:

String sort = page.getSort().stream()
    .map(order -> order.getProperty() + ":" + order.getDirection())
    .collect(Collectors.joining(","));
model.addAttribute("sort", sort);

此示例使用":"连接属性和方向,然后使用","连接所有订单。根据您的评论,您想使用","而不是":",但这可能会导致您在解析Order列表时遇到其他问题。

您可能想了解SortHandlerMethodArgumentResolver的工作原理,特别是它的parseParameterIntoSort方法,以了解相应的解析逻辑的工作原理。