¿Hay algún componente de paginación estándar fuera de la caja, fácil de implementar/tag-lib o muestra de código disponible para la paginación en Spring MVC?Cómo implementar la paginación en Spring MVC 3
Respuesta
Eche un vistazo a PagedListHolder
y otras clases de org.springframework.beans.support
.
Consulte el JPetstore en las muestras para ver algunos ejemplos, p. 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);
}
}
Estaba buscando una manera de hacer eso, también, pero no encontré ningún componente estándar o taglib. Creo que principalmente porque la paginación puede volverse muy específica ya que necesita recuperar sus datos con paginación de la base de datos (si está utilizando Hibernate puede hacerlo fácilmente usando la API de Criteria). Se me ocurrió algo similar:
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 ahora realiza una solicitud a http://domain/app/test.html?id=10&page=1&results=30&sortOrder=asc
obtendrá el objeto de localizador en su solicitud.
Nadie viene a la mente y Google tampoco revela ningún componente específico para eso (aunque da ejemplos y consejos bastante concretos). Pero, en teoría, solo un grupo de botones y uno (o dos) parámetros de solicitud son más que suficientes. Luego, deje que el SQL/DB haga su trabajo. He publicado una respuesta a una pregunta similar en contexto JSP/Servlet/DAO antes de here.
Básicamente se reduce a pasar firstrow
(índice de primera fila que se mostrará en una página) alrededor como parámetro de la petición y que tiene dos botones/enlaces en forma de paginación que en/decrementa el firstrow
con rowcount
(cantidad de filas que se muestran de una vez en una página) en combinación con una consulta SQL que devuelve un subconjunto de los resultados con ayuda de cada LIMIT
, OFFSET
cláusulas o subselecciones, o funciones específicas, dependiendo de la BD en cuestión. Consulte la respuesta anterior para obtener ejemplos detallados de código y consultas SQL.
¿Alguna vez escuchó sobre el proyecto Spring Data JPA? Hay una buena solución flexible que usa la interfaz Pagable. Descubrí que es la forma más sencilla de lograr una paginación limpia y sin etiquetas. Vea más en el Spring Data JPA homepage.
Lo busqué en ese enlace y no encontré nada saltándome para este propósito – mmcrae
Here's a link to the Spring Data JPA reference docs, donde tienen un enfoque muy limpio de la paginación web.
Impresionante, gracias. ¿Hay soporte para buscar en columnas? – mmcrae
Sí. Repos admite findByXxx(), findByXxx (paginable) etc. donde xxx es la columna. –
Publiqué una biblioteca de código abierto de Java enfocada en la paginación con Spring Framework hace algún tiempo.
Aunque no ha sido muy exitoso, tal vez alguien esté interesado en probarlo.
hay ejemplos para usarlo con
Los ejemplos en línea son algo obsoleto, descargar mejor el archivo JDAL-muestras desde sourceforge.
- 1. ¿Cómo implementar una barra de progreso usando Spring 3 MVC?
- 2. ¿Cuál es la mejor manera de implementar la paginación usando Spring MVC con mysql
- 3. Spring mvc 3 - Acceso HTTPS
- 4. Spring 3 JSON con MVC
- 5. ¿Cómo implementar paginación en Mongodb?
- 6. Spring 3 MVC Nesting RequestMapping
- 7. Cómo implementar la característica Salir utilizando Spring Web MVC
- 8. Cómo usar Servlet 3 @WebServlet & async con Spring MVC 3?
- 9. ¿Cómo implementa la paginación en ASP.NET MVC?
- 10. ¿Cómo manejar la paginación en asp.net mvc?
- 11. Spring 3 MVC y asistentes modales
- 12. manera eficiente de implementar paginación
- 13. Cómo heredar RequestMappings en una Spring 3 MVC REST API
- 14. Spring MVC 3: asignación ambigua hallada
- 15. Spring MVC 3 - ¿Responde a la solicitud con un 404?
- 16. Enlace/incluir css en FreeMarker usando Spring 3 MVC
- 17. Cómo almacenar la sesión en Spring MVC
- 18. Spring MVC 3 - etiquetas personalizadas en <form:select>
- 19. Struts2 vs Spring 3
- 20. Spring MVC 3, Interceptor en todos excluyendo algunas rutas definidas
- 21. Spring MVC 3: Devolver XML a través de @ResponseBody
- 22. cómo implementar MVC en jquery
- 23. Validación en Spring MVC
- 24. Spring 3 MVC que accede a HttpRequest desde el controlador
- 25. ServletContext y Spring MVC
- 26. Spring 3 MVC: Mostrar mensaje de validación con validador personalizado
- 27. Datos MySQL - ¿La mejor manera de implementar la paginación?
- 28. ¡La forma correcta de implementar paginación en SqlDataReader!
- 29. Primeros pasos con Spring 3 Web MVC - Configuración de todo
- 30. Spring 3 MVC dispatcher xml y applicationContext xml
(+1) Hot maldición, no tenía idea de que estaba allí. Debo haber implementado esa funcionalidad al menos 3 veces, y ya estaba ... – skaffman
genial, por cierto, ¿pueden explicarme cómo se necesita la sesión en el ejemplo de SearchProductsController code? Revisé el código y no pude usarlo. – Nachiket
@Nachiket Una vez creado, el objeto 'PagedListHolder' se coloca en la sesión, la paginación se realiza realmente en un objeto en memoria. ¿Responde esto a tu pregunta? Si no, ¿puedes aclarar? –