Весна с нумерацией листьев тимелина для списка

Весна с тимелиновой нумерацией листов

1. обзор

В этом кратком руководстве мы создадим простое приложение дляdisplay a list of items with pagination using Spring and Thymeleaf.

Чтобы узнать, как интегрировать Thymeleaf со Spring, ознакомьтесь с нашей статьейhere.

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

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


    org.thymeleaf
    thymeleaf-spring5
    3.0.9.RELEASE


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

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

3. модели

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

Сначала давайте определим классBook с двумя полями и конструктором всех аргументов:

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

    // standard constructor, setters and getters
}

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

Затем мы создадим сервис дляgenerate the paginated book list for the requested page с помощью библиотеки 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;
    }
}

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

5. Spring Controller

Нам понадобится контроллер Spring дляretrieve the book list of a selected page when given the page size and current page number.

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

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

Например,/listBooks?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";
    }
}

To prepare our pagination for the view, we’ve added model attributes in the Spring controller, включая выбранныйPage и список номеров страниц.

6. Шаблон с тимьяном

Пришло время создать шаблон Thymeleaf“listBooks.html”, которыйdisplays the list of books with pagination based on model attributes from our Spring controller.

Сначала мы перебираем список книг и отображаем их в виде таблицы. Тогда мыshow the pagination when the total number of pages is greater than zero.

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

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

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

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