La paginación es una función de uso común en proyectos web Java. Ayer, se implementaron operaciones simples de paginación y paginación de búsqueda en Spring MVC. Grabemos aquí. El marco utilizado es (MyBatis+SpringMVC+Spring).
Primero necesitamos una clase de herramienta paginada:
1. Paginación
import java.io.serializable; / *** Pagination*/ Public Class Page implementa serializable {private static final Long SerialVersionUid = -3198048449643774660l; privado int pagenow = 1; // Número de página actual privado int pageSize = 4; // Número de registros que se muestran en cada página Private int TotalCount; // Número total de registros privados int totalPageCount; // Número total de páginas @SupplesSwarnings ("no utilizados") Private int StartPos; // Inicie la posición, comience desde 0 @suppleswarnings ("no usado") boolean privado hasfirst; // ¿Hay una página de inicio @suppleswarnings ("no utilizada") privado boolean haspre; // hay una página anterior @suppresswarnings ("no usado") privado boolean Hasnext; // está allí a la siguiente página @supressresswarnings ("" no usado ") privado) privado") está allí? Haslast; // ¿Hay una última página/ ** * pasar el número total de registros y la página actual a través del constructor * @param totalCount * @param pagenow */ public página (int totalCount, int pagenow) {this.totalcount = totalCount; this.pagenow = pagenow; } / *** Obtenga el número total de páginas, número total de páginas = registros totales / número total de páginas* @return* / public int getTotalPageCount () {totalPageCount = getTotalCount () / getPageSize (); return (TotalCount % PageSize == 0)? TotalPageCount: totalPageCount + 1; } public void settotalPageCount (int totalpageCount) {this.totalPageCount = totalPageCount; } public int getPagenow () {return pagenow; } public void setPagenow (int pagenow) {this.pagenow = pagenow; } public int getPageSize () {return PageSize; } public void setPageSize (int págsagesize) {this.pagesize = pageSize; } public int getTotalCount () {return TotalCount; } public void settotalCount (int TotalCount) {this.totalCount = TotalCount; } / ** * Obtenga la posición inicial del registro de selección * @return * / public int getStartPos () {return (pagenow - 1) * pageSize; } public void setStartPos (int startPos) {this.startpos = startpos; } / *** ¿Es la primera página* @return* / public boolean ishasfirst () {return (pagenow == 1)? falso: verdadero; } public void sethasfirst (boolean Hasfirst) {this.hasfirst = Hasfirst; } / *** ¿Hay una página de inicio* @return* / public boolean ishaspre () {// Si hay una página de inicio, hay la página anterior, porque hay una página de inicio, no es la primera página. devolver ishasfirst ()? verdadero: falso; } public void sethaspre (boolean Haspre) {this.haspre = Haspre; } / *** ¿Hay una página siguiente* @return* / public boolean ishasnext () {// Si hay una última página, hay la página siguiente, porque hay una última página, no es la última página. regresar ishaslast ()? verdadero: falso; } public void sethasnext (boolean Hasnext) {this.hasnext = HasNext; } / *** ¿Hay una última página* @return* / public boolean ishaslast () {// Si no es la última página, habrá un retorno de la última página (pagenow == getTotalcount ())? falso: verdadero; } public void sethaslast (boolean haslast) {this.haslast = Haslast; }}Con esta clase de herramientas, primero escriba la instrucción SQL en el archivo de configuración xxxxmapper.xml de mybatis, como sigue:
< resultType = "long"> select Count (*) desde el nombre de la tabla donde user_id = #{userId, jdbctype = integer} </select>Aquí podemos ver que los dos <select> s deben pasar en 3 y 1 parámetro respectivamente. En este momento, escriba una interfaz en el archivo DAO correspondiente IXXXXDAO para escribir el método correspondiente. El nombre del método es el mismo que el valor de atributo de identificación en mapper.xml:
/ ** * Pase múltiples parámetros utilizando el método de anotación, paginación del producto del usuario, consulta iniciando sesión en ID de usuario * @param página * @param userid * @return startPos},#{pagesize} */ public list <products> selectProductSbyPage ( @ @value = "startPos") introger startPos, @param (value = "pagesize") INTEGERGERET PageSize,@param (valor = "userId") entero de usuarioid); / ** * Obtenga información y consulta de cantidad de producto iniciando sesión en ID de usuario * @param userId * @return */ public long getProductScount (@param (value = "userId") entero userId);Una vez completada la definición de interfaz, debe escribir la interfaz comercial y el método de implementación correspondiente, definir dicho método en la interfaz y luego anularlo en la clase de implementación:
/ ** * PAGE PROSITIVO PRODUCT * @param Solicitud * @param modelo * @param loginuserID */ void showProductsByPage (solicitud httpservletRequest, modelo modelo, int loginuserID);
El siguiente método para implementar la clase es llamar a la capa DAO y aceptar los parámetros aprobados por el controlador para realizar el procesamiento de la lógica comercial. La solicitud se utiliza para obtener los parámetros aprobados por el front-end, y el modelo se utiliza para devolver los resultados de procesamiento a la página JSP.
@Override public void showProductSbyPage (solicitud httpservletRequest, modelo modelo, int loginuserid) {string pagenow = request.getParameter ("pagenow"); Página página = nulo; List <CuticWithBlObs> Products = New ArrayList <ProductWithBlObs> (); int totalCount = (int) productdao.getProductScount (LoginUserID); if (pagenow! = null) {page = new Page (TotalCount, Integer.ParseInt (Pagenow)); allProducts = this.productdao.SelectProductSByPage (page.getStartPos (), page.getPageSize (), LoginUserID); } else {page = new Page (TotalCount, 1); allProducts = this.productdao.SelectProductSByPage (page.getStartPos (), page.getPageSize (), LoginUserID); } model.addattribute ("productos", productos); model.addattribute ("página", página); }El siguiente es la escritura del controlador. Cuando el usuario necesita saltar a la página de este producto real, debe pasar por el método correspondiente en el controlador. Este proceso de procesamiento es llamar al método de la capa de negocios para completar y luego devolver el resultado a la pantalla dinámica JSP. El servidor genera la página y la pase al cliente (navegador) para la realidad. Este es un proceso MVC.
/ ** * Inicialice la página JSP de la lista "My Products", con la función de paginación * * @param solicitud * @param modelo * @return */ @requestmapping (valor = "ruta de map", método = requestmethod.get) cadena pública showmyproduct (httpservletrequest request, modelo modelo) {// obtener loginuser en la sesión loginuser de usuario = (usuario) (usuario) (usuario) (usuario) (usuario) request.getSession (). getAttribute ("Loginuser"); // Determinar si la sesión no es válida if (loginuser == null || "" .equals (loginuser)) {return "redirect:/"; } int loginuserId = loginuser.getUserId (); // El servicio de productos aquí es un objeto de la interfaz IProductService inyectada thes.ProductService.ShowProductSByPage (solicitud, modelo, LoginUserID); devolver "JSP Path para saltar a"; }No escribiré la parte de aceptación de la página JSP. Todos son iguales, es decir, combinan JSTL y El para escribirlo. (También juzgué cuando saliendo.
< <c: elegir> <c: when test = "$ {page.pagenow - 1> 0}"> <a href = "myproductPage? pagenow = $ {page.pagenow - 1}" rel = "nofollow externo"> página anterior </a> </c: cuando> <c: when test = "$ {page.pagenow - 1 <<= 0}" href = "myProductPage? Pagenow = 1" rel = "externo nofollow" rel = "externo nofollow"> página anterior </a> </c: when> </c: elegir> <c: elegir> <c: when test = "$ {page.totalpageCount == 0}"> <a href = "myproduce? rel="external nofollow" rel="external nofollow" >Next page</a> </c:when> <c:when test="${page.pageNow + 1 < page.totalPageCount}"> <a href="myProductPage?pageNow=${page.pageNow + 1}" rel="external nofollow" >Next page</a> </c:when> <c: when test = "$ {page.pagenow + 1> = page.totalpageCount}"> <a href = "myProductPage? Pagenow = $ {page.totalpageCount}" rel = "nofollow" rElfollow "re-" externo " test = "$ {page.totalPageCount == 0}"> <a href = "myproductPage? pagenow = $ {page.pagenow}" rel = "externo nofollow" rel = "externo" externo "> Última página </a> </c: Cuando> <c: de lo contrario> <a href = "myProductPage? Pagenow = $ {page.totalpageCount}" rel = "externo nofollow" rel = "externo nofollow"> Última página </a> </c: de lo contrario> </c: elige> </div> <!-Función de paginación end->>2. Paging de consulta
Con respecto a la paginación de consultas, el proceso es aproximadamente el mismo, excepto que el tercer parámetro (lo anterior es loginuserid) necesita aceptar los parámetros de entrada del usuario. De esta manera, necesitamos aceptar el parámetro de entrada del usuario en el controlador (la <put> en la página se pasa en el método get), y luego agregarlo a la sesión para completar la consulta Paging (aquí, debido al hipervínculo de hipervínculo en la "página siguiente", las páginas JSP se usan para que se use y sean el código de búsqueda de la búsqueda. por separado y cargándolo con una etiqueta <incluye> a la página JSP requerida, de modo que se pueda evitar el código):
Aquí está el código para el controlador como referencia:
/ ** * Consulte el producto por nombre del producto * @param request * @param modelo * @return */ @requestmapping (valor = "dirección de mapa", método = requestmethod.get) public string SearchForProducts (httpservletRequest Solicitud, modelo modelo) {httpsession session = request.getSession (); Cadena param = request.getParameter ("param"); Condición de cadena = (string) session.getAttribute ("condición"); // Determine primero si la condición en la sesión está vacía si (condición == null) {condición = new String (); session.SetAttribute ("condición", condición); // Si la condición en la sesión está vacía, determine si el parámetro aprobado está vacío. Si está vacío, salte a la página del resultado de la búsqueda if (param == null || "" .equals (param)) {return "private/space/sproductsearchResult"; }} // Si la sesión no está vacía y el parámetro de condición de búsqueda entrante no está vacía, luego asigne parámetro a condición if (param! = Null &&! ("". Equals (param))) {condición = param; session.SetAttribute ("condición", condición); } // Use el valor del atributo de condición en la sesión como la consulta condición this.productService.ShowsearchedProductSByPage (solicitud, modelo, condición); devolver "página salta"; }Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.