Рубрики
Без рубрики

Весна с разбиением на страницы Thymeleaf для списка

Узнайте, как использовать Thymeleaf и Spring Data Commons для разбиения на страницы списка элементов в вашем веб-интерфейсе Spring.

Автор оригинала: baeldung.

1. Обзор

В этом кратком руководстве мы создадим простое приложение для отображения списка элементов с разбиением на страницы с помощью Spring и Thymeleaf .

Для ознакомления с тем, как интегрировать Thymeleaf с Spring, пожалуйста, ознакомьтесь с нашей статьей здесь .

2. Зависимости Maven

Помимо обычных зависимостей Spring, мы добавим зависимости для Thymeleaf и Spring Data Commons:


    org.thymeleaf
    thymeleaf-spring5
    3.0.11.RELEASE


    org.springframework.data
    spring-data-commons
    2.3.2.RELEASE

Мы можем найти последние зависимости thymeleaf-spring 5 и spring-data-commons в центральном репозитории Maven.

3. Модели

Наш пример приложения продемонстрирует разбиение на страницы для списка книг.

Во-первых, давайте определим класс Book с двумя полями и конструктором всех аргументов:

public class Book {
    private int id;
    private String name;

    // standard constructor, setters and getters
}

4. Обслуживание

Затем мы создадим сервис для генерации разбитого на страницы списка книг для запрашиваемой страницы с помощью библиотеки Spring Data Commons:

@Service
public class BookService {

    final private List books = BookUtils.buildBooks();

    public Page findPaginated(Pageable pageable) {
        int pageSize = pageable.getPageSize();
        int currentPage = pageable.getPageNumber();
        int startItem = currentPage * pageSize;
        List list;

        if (books.size() < startItem) {
            list = Collections.emptyList();
        } else {
            int toIndex = Math.min(startItem + pageSize, books.size());
            list = books.subList(startItem, toIndex);
        }

        Page bookPage
          = new PageImpl(list, PageRequest.of(currentPage, pageSize), books.size());

        return bookPage;
    }
}

В приведенном выше сервисе мы создали метод для возврата выбранной страницы на основе запрошенной страницы, которая представлена интерфейсом Pageable . Класс PageImpl помогает отфильтровать разбитый на страницы список книг.

5. Пружинный контроллер

Нам понадобится пружинный контроллер, чтобы получить список книг выбранной страницы при заданном размере страницы и текущем номере страницы .

Чтобы использовать значения по умолчанию для выбранной страницы и размера страницы, мы можем просто получить доступ к ресурсу по адресу /список книг , без каких-либо параметров.

Если требуется какой-либо размер страницы или конкретная страница, мы можем добавить параметры page и size .

Например, /список книг?page=2&size=6 будет извлекать вторую страницу с шестью элементами на странице:

@Controller
public class BookController {

    @Autowired
    private BookService bookService;

    @RequestMapping(value = "/listBooks", method = RequestMethod.GET)
    public String listBooks(
      Model model, 
      @RequestParam("page") Optional page, 
      @RequestParam("size") Optional size) {
        int currentPage = page.orElse(1);
        int pageSize = size.orElse(5);

        Page bookPage = bookService.findPaginated(PageRequest.of(currentPage - 1, pageSize));

        model.addAttribute("bookPage", bookPage);

        int totalPages = bookPage.getTotalPages();
        if (totalPages > 0) {
            List pageNumbers = IntStream.rangeClosed(1, totalPages)
                .boxed()
                .collect(Collectors.toList());
            model.addAttribute("pageNumbers", pageNumbers);
        }

        return "listBooks.html";
    }
}

Чтобы подготовить нашу разбиение на страницы для представления, мы добавили атрибуты модели в Spring controller , включая выбранную страницу и список номеров страниц.

6. Шаблон Thymeleaf

Теперь пришло время создать шаблон Thymeleaf “listBooks.html” , который отображает список книг с разбиением на страницы на основе атрибутов модели из нашего весеннего контроллера .

Сначала мы перебираем список книг и выводим их в виде таблицы. Затем мы показываем разбиение на страницы, когда общее количество страниц больше нуля .

Каждый раз, когда мы нажимаем и выбираем страницу, соответствующий список книг будет отображаться с выделенной ссылкой на текущую страницу:

7. Заключение

В этой статье мы продемонстрировали, как можно разбить список на страницы с помощью Thymeleaf с помощью Spring framework.

Как обычно, все примеры кода, используемые в статье, доступны на GitHub .