Как получить Сортировка из Pageable в свойство ссылки Thymeleaf? - PullRequest
0 голосов
/ 24 апреля 2018

Я хочу добавить ссылки на страницы в свой документ.

<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. Я предполагаю, что есть лучший способ, чем создать нужную строку самостоятельно. Я думаю, что это общая проблема.

Каков наилучший способ создания пригодной для использования строки параметра сортировки?

Мне не нужно статичное поведение, как показано здесь

  • пружина 5
  • Thymeleaf 3

1 Ответ

0 голосов
/ 16 декабря 2018

Предполагая, что у вас есть Pageable или Page в вашем Controller, поэтому вы можете получить к нему доступ Sort, вызвав его метод getSort(). Зная, что Sort равно Iterable<Order>, вы сможете перебирать Order экземпляров - каждый из которых содержит пару (свойство, направление) - и строить произвольную строку sort. Вот пример, использующий потоки и лямбды Java 8, но, конечно, это можно сделать обязательно:

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

Этот пример объединяет свойство и направление, используя ":", а затем объединяет все заказы, используя ",". Согласно вашему комментарию, вы хотите использовать "," вместо ":", но это может привести к другим проблемам с анализом списка Order.

Возможно, вы захотите посмотреть, как работает SortHandlerMethodArgumentResolver, в частности его метод parseParameterIntoSort, чтобы понять, как работает соответствующая логика синтаксического анализа.

...