Printemps avec pagination thymeleaf pour une liste

Printemps avec pagination thymeleaf pour une liste

1. Vue d'ensemble

Dans ce rapide didacticiel, nous allons créer une application simple pourdisplay a list of items with pagination using Spring and Thymeleaf.

Pour une introduction sur la façon d'intégrer Thymeleaf avec Spring, veuillez consulter notre articlehere.

2. Dépendances Maven

Outre les dépendances Spring habituelles, nous ajouterons les dépendances pour Thymeleaf et Spring Data Commons:


    org.thymeleaf
    thymeleaf-spring5
    3.0.9.RELEASE


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

Nous pouvons trouver les dernières dépendancesthymeleaf-spring5 etspring-data-commons dans le référentiel Maven Central.

3. Des modèles

Notre exemple d'application montrera la pagination pour une liste de livres.

Tout d'abord, définissons une classeBook avec deux champs et un constructeur tous arguments:

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

    // standard constructor, setters and getters
}

4. Un service

Ensuite, nous allons créer un service pourgenerate the paginated book list for the requested page à l'aide de la bibliothèque 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;
    }
}

Dans le service ci-dessus, nous avons créé une méthode pour renvoyer lesPage sélectionnés en fonction de la page demandée, qui est représentée par l'interface Pageable. La classePageImpl aide à filtrer la liste paginée des livres.

5. Contrôleur de printemps

Nous aurons besoin d'un contrôleur Spring pourretrieve the book list of a selected page when given the page size and current page number.

Pour utiliser les valeurs par défaut pour la page et la taille de page sélectionnées, nous pouvons simplement accéder à la ressource à/listBooks, sans aucun paramètre.

Si une taille de page ou une page spécifique est requise, nous pouvons ajouter les paramètrespage etsize.

Par exemple,/listBooks?page=2&size=6 récupérera la page deux avec six éléments par page:

@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, y compris lesPage sélectionnés et une liste de numéros de page.

6. Modèle Thymeleaf

Il est maintenant temps de créer un modèle Thymeleaf“listBooks.html”, quidisplays the list of books with pagination based on model attributes from our Spring controller.

Tout d'abord, nous parcourons la liste des livres et les affichons dans un tableau. Ensuite, nousshow the pagination when the total number of pages is greater than zero.

Chaque fois que nous cliquons et sélectionnons une page, la liste de livres correspondante sera affichée avec le lien de la page actuelle mis en surbrillance:

7. Conclusion

Dans cet article, nous avons montré comment paginer une liste avec Thymeleaf avec le framework Spring.

Comme d'habitude, tous les exemples de code utilisés dans l'article sont disponiblesover on GitHub.