Frühling mit Thymeleaf Paginierung für eine Liste

Frühling mit Thymeleaf Pagination für eine Liste

1. Überblick

In diesem kurzen Tutorial erstellen wir eine einfache Anwendung fürdisplay a list of items with pagination using Spring and Thymeleaf.

Eine Einführung zur Integration von Thymeleaf in Spring finden Sie in unserem Artikelhere.

2. Maven-Abhängigkeiten

Neben den üblichen Spring-Abhängigkeiten fügen wir die Abhängigkeiten für Thymeleaf und Spring Data Commons hinzu:


    org.thymeleaf
    thymeleaf-spring5
    3.0.9.RELEASE


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

Die neuesten Abhängigkeiten vonthymeleaf-spring5 undspring-data-commons finden Sie im Maven Central-Repository.

3. Modelle

Unsere Beispielanwendung zeigt die Paginierung für eine Liste von Büchern.

Definieren wir zunächst eineBook-Klasse mit zwei Feldern und einem Konstruktor für alle Argumente:

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

    // standard constructor, setters and getters
}

4. Bedienung

Anschließend erstellen wir mithilfe der Spring Data Commons-Bibliothek einen Dienst fürgenerate the paginated book list for the requested page:

@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;
    }
}

Im obigen Dienst haben wir eine Methode erstellt, um die ausgewähltenPage basierend auf der angeforderten Seite zurückzugeben, die durch die Pageable-Schnittstelle dargestellt wird. Die KlassePageImplhilft dabei, die paginierte Liste der Bücher herauszufiltern.

5. Federkontroller

Wir benötigen einen Federregler fürretrieve the book list of a selected page when given the page size and current page number.

Um die Standardwerte für die ausgewählte Seite und Seitengröße zu verwenden, können wir einfach mit/listBooks ohne Parameter auf die Ressource zugreifen.

Wenn eine Seitengröße oder eine bestimmte Seite erforderlich ist, können wir die Parameterpage undsize hinzufügen.

Zum Beispiel ruft/listBooks?page=2&size=6 Seite zwei mit sechs Elementen pro Seite ab:

@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, einschließlich der ausgewähltenPage und einer Liste von Seitenzahlen.

6. Thymeleaf-Vorlage

Jetzt ist es Zeit, eine Thymeleaf-Vorlage“listBooks.html” zu erstellen, diedisplays the list of books with pagination based on model attributes from our Spring controller.

Zuerst iterieren wir die Liste der Bücher und zeigen sie in einer Tabelle an. Dann haben wirshow the pagination when the total number of pages is greater than zero.

Jedes Mal, wenn wir auf eine Seite klicken und diese auswählen, wird die entsprechende Bücherliste mit dem hervorgehobenen Link zur aktuellen Seite angezeigt:

7. Fazit

In diesem Artikel haben wir gezeigt, wie wir mit Thymeleaf eine Liste mit dem Spring-Framework paginieren können.

Wie üblich sind alle im Artikel verwendeten Codebeispieleover on GitHub verfügbar.