requestmapping puede para método mvc multiple formulario form escritura encontrar ejemplo commandname attribute atributo arquitectura java spring spring-mvc servlets pagination

java - puede - Cómo implementar la paginación en Spring MVC 3



spring mvc ejemplo (6)

¿Alguna vez has oído hablar del 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. Consulte más en la página principal de Spring Data JPA .

¿Hay algún componente de paginación estándar / tag-lib o código-muestra listo para usar, fácil de implementar, disponible para la paginación en Spring MVC?


Estaba buscando una forma de hacerlo, 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 como esto:

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 buscapersonas en su solicitud.


Nadie viene a la mente y Google tampoco revela ningún componente específico para eso (aunque da ejemplos bastante concretos y sugerencias). 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 here .

Básicamente se reduce para pasar un primer firstrow (índice de la primera fila que se mostrará en una página) como parámetro de solicitud y tener dos botones / enlaces en la forma de paginación que in / disminuye el firstrow con firstrow de filas (cantidad de filas mostradas a la vez en un página) en combinación con una consulta SQL que devuelve un subconjunto de los resultados con la ayuda de debajo de cada cláusula LIMIT , OFFSET , o subselecciones, o funciones específicas, dependiendo de la DB en cuestión. Consulte la respuesta anterior para obtener ejemplos detallados de código y consultas SQL.


Publiqué una biblioteca de código abierto de Java centrada en la paginación con el marco de Spring 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 obsoletos, mejor descargue el archivo jdal-samples de sourceforge .



Eche un vistazo a PagedListHolder y a otras clases de org.springframework.beans.support .

Consulte el JPetstore en las muestras para ver algunos ejemplos, por ejemplo, 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); } }