56 votes

Comment implémenter la pagination dans Spring MVC 3

Existe-t-il un composant / tag-lib ou un code-échantillon de pagination standard prêt à l'emploi, facile à mettre en œuvre et disponible pour la pagination dans Spring MVC?

À votre santé

87voto

Pascal Thivent Points 295221

Jetez un oeil à l' PagedListHolder et d'autres classes org.springframework.beans.support.

Voir la JPetstore dans les échantillons de quelques exemples, par exemple, en SearchProductsController.java:

public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
    String keyword = request.getParameter("keyword");
    if (keyword != null) {
        if (!StringUtils.hasLength(keyword)) {
            return new ModelAndView("Error", "message", "Please enter a keyword to search for, then press the search button.");
        }
        PagedListHolder productList = new PagedListHolder(this.petStore.searchProductList(keyword.toLowerCase()));
        productList.setPageSize(4);
        request.getSession().setAttribute("SearchProductsController_productList", productList);
        return new ModelAndView("SearchProducts", "productList", productList);
    }
    else {
        String page = request.getParameter("page");
        PagedListHolder productList = (PagedListHolder) request.getSession().getAttribute("SearchProductsController_productList");
        if (productList == null) {
            return new ModelAndView("Error", "message", "Your session has timed out. Please start over again.");
        }
        if ("next".equals(page)) {
            productList.nextPage();
        }
        else if ("previous".equals(page)) {
            productList.previousPage();
        }
        return new ModelAndView("SearchProducts", "productList", productList);
    }
}

11voto

Daff Points 22358

Je cherchais un moyen de le faire aussi, mais je n'ai pas trouver n'importe quel composant standard ou taglib. Je pense principalement à cause de la pagination peut devenir très spécifique car vous avez besoin de récupérer vos données avec la pagination à partir de la base de données déjà (si vous êtes en utilisant Hibernate, vous pouvez facilement le faire en utilisant les Critères de l'API). Je suis venu avec quelque chose comme ceci:

public class Pager
{
    private int page;
    private int results;
    private String sortOrder;
    private String sortColumn;

    // Getters and setters
}

@Controller
public class StuffController
{
    @Autowired SomeEntityService someEntityService;

    @RequestMapping("/test.html", method = Method.GET)
    public void getStuffPaged(@RequestParam("id") String id, Pager pager, ModelMap mm)
    {
        mm.addAttribute("entities", someEntityService.get(id, pager));
    }
}

Si vous demandez à présent http://domain/app/test.html?id=10&page=1&results=30&sortOrder=asc vous obtiendrez le pager Objet de votre demande.

4voto

BalusC Points 498232

Nul ne vient à l'esprit et Google ne révèle pas de composants spécifiques pour que (bien qu'il donne assez de beaucoup d'exemples concrets et de conseils). Mais en théorie, tout un tas de boutons et un (ou deux) paramètres de la requête sont plus que suffisantes. Puis, laissez le SQL/DB faire son travail. J'ai posté une réponse à une question similaire en JSP/Servlet/DAO contexte avant ici.

Il se résume essentiellement en passer firstrow (indice de la première ligne à être affiché dans une page) autour comme paramètre de la requête et avoir deux boutons/liens dans la pagination formulaire/décrémente le firstrow avec rowcount (en nombre de lignes affichées à la fois dans une page) en combinaison avec une requête SQL qui retourne un sous-ensemble des résultats à l'aide des sous chaque LIMIT, OFFSET clauses, ou les sous-sélections, ou à des fonctions spécifiques, en fonction de l'id en question. Voir la aforelinked réponse pour obtenir des exemples de code et des requêtes SQL.

4voto

Avez-vous déjà entendu parler du projet Spring-DATA? Là vous avez une bonne solution en utilisant une interface de flexibilité comme Pagable. Pour moi, c’est le moyen le plus simple de réaliser une pagination propre et sans code chaud. Consultez ce lien: http://www.springsource.org/spring-data/jpa

3voto

Willie Wheeler Points 8632

Voici un lien vers l’approche Spring Data de la pagination Web. Très propre:

http://static.springsource.org/spring-data/data-jpa/docs/current/reference/html/repositories.html#web-pagination

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X