Existe-t-il des composants de pagination/tag-lib ou échantillon de code prêts à l'emploi, faciles à implémenter, disponibles pour la pagination dans Spring MVC?
Jetez un œil à PagedListHolder
et aux autres classes de org.springframework.beans.support
.
Voir le JPetstore dans les exemples pour quelques exemples, par ex. dans 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);
}
}
Je cherchais également un moyen de le faire, mais je n'ai trouvé aucun composant standard ou taglib. Je pense principalement parce que la pagination peut devenir très spécifique car vous devez déjà récupérer vos données avec la pagination de la base de données (si vous utilisez Hibernate, vous pouvez facilement le faire en utilisant l'API Criteria). J'ai trouvé quelque chose comme ça:
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 effectuez maintenant une demande à http://domain/app/test.html?id=10&page=1&results=30&sortOrder=asc
vous obtiendrez l'objet pager dans votre demande.
Personne ne vient à l'esprit et Google ne révèle pas non plus de composants spécifiques pour cela (bien qu'il donne à peu près des exemples et des conseils concrets). Mais en théorie, juste un tas de boutons et un (ou deux) paramètres de requête sont plus que suffisants. Laissez ensuite le SQL/DB faire son travail. J'ai posté une réponse à une question similaire dans le contexte JSP/Servlet/DAO avant ici .
Il se résume essentiellement à passer firstrow
(index de la première ligne à afficher dans une page) comme paramètre de demande et ayant deux boutons/liens dans le formulaire de pagination qui dans/décrémente le firstrow
avec rowcount
(nombre de lignes affichées simultanément dans une page) en combinaison avec une requête SQL qui renvoie un sous-ensemble des résultats à l'aide de sous chaque LIMIT
, OFFSET
clauses, ou des sous-sélections, ou des fonctions spécifiques, selon la base de données en question. Voir la réponse ci-dessus pour des exemples de code détaillés et des requêtes SQL.
Avez-vous déjà entendu parler du projet Spring Data JPA? Il existe une belle solution flexible utilisant l'interface Pagable. J'ai trouvé que c'était le moyen le plus simple d'obtenir une pagination propre et sans passe-partout. Découvrez-en plus sur la page d'accueil Spring Data JPA .
Voici un lien vers les documents de référence Spring Data JPA , où ils ont une approche très propre de la pagination Web.
J'ai publié il y a quelque temps une bibliothèque open source Java bibliothèque axée sur la pagination avec le framework Spring.
Bien qu'il n'ait pas connu beaucoup de succès, quelqu'un pourrait être intéressé à l'essayer.
Il existe des exemples d'utilisation avec
Les exemples en ligne sont quelque peu obsolètes, mieux vaut télécharger le fichier jdal-samples depuis sourceforge .