La implementación front-end utiliza Ligerui para implementar la paginación. Se siente que usar el marco es realmente simple, y es aburrido. Simula la interfaz de paginación de Liger y la implementa (siempre que sea una función, ignora el estilo)
Aquí usamos la arquitectura básica de tres capas + Servlet + JSP para implementarla. La idea es muy simple. Escriba toda la información relacionada con la paginación en una clase de PageBean. El servicio devuelve esta clase de frijoles. Cada vez que se busca la consulta de paginación, la información se encuentra desde el frijol. Sin embargo, los detalles son bastante complicados, como el procesamiento de límites (los límites front-end y de fondo deben procesarse), la página actual debe mostrarse después de que el cuadro desplegable salta, etc.
Este es el estilo de paginación implementado por Ligerui (el proceso de implementación se escribió en mi blog anterior: //www.vevb.com/article/92850.htm)
Proceso de implementación de simulación:
Estructura de directorio
Base de datos (mysql)
La capa del modelo, una base de datos correspondiente al modelo (blog) y un PageBean (BlogPage)
import java.sql.date; blog de clase pública {private int id; private int categoría_id; título de cadena privada; Contenido de cadena privada; fecha privada creada_time; // getter and setter métodos @Override public String toString () {return "Blog [id =" + id + ", category_id =" + category_id + ", content =" + content + ", creating_time =" + create_time + "]"; }} PlagPage de blog de clase pública {Lista privada <Blog> Pagerecord; // registro para cada página private int pageno; // la página actual private int pagenosTart; // Cada página Inicie el índice privado int PageSize = 5; // ¿La cantidad de datos por página intotalRecord; // Total de los registros privados? considerado como información existente this.totalRecord = TotalRecord; // Calcule el número total de páginas TotalPage = (TotalRecord%PageSize == 0)? TotalRecord/PageSize: TotalRecord/Pagesize+1; // Procesamiento de borde de pageno if (pageno <= 1) this.pageno = 1; else if (pageno> = totalpage) this.pageno = totalPage; de lo contrario este.pageno = pageno; // Calcule el índice de cada página, es decir, el índice de los primeros datos de cada página, utilizados para la consulta de paginación PagenosStart = (this.pageno-1)*PageSize; } public int getPageStart () {return PagenosStart; } public void setPagenosStart (int pagenosStart) {this.pagenosTart = pagenosStart; } Lista pública <Blog> getPagerecord () {return Pagerecord; } public void setPagerecord (List <Blog> Pagerecord) {this.pagerecord = Pagerecord; } public int getPageno () {return pageno; } public void setPageno (int pageno) {this.pageno = pageno; } public int getPageSize () {return PageSize; } public void setPageSize (int págsagesize) {this.pagesize = pageSize; } public int getTotalRecord () {return TotalRecord; } public void settotalRecord (int totalRecord) {this.totalRecord = totalRecord; } public int getTotalPage () {return TotalPage; } public void settotalPage (int totalpage) {this.totalPage = totalPage; }} Capa de dao
JDBCutil encapsula las operaciones de conexión y versión de JDBC
clase pública jdbcutil {private static string url = "jdbc: mysql: // localhost: 3306/blogs_stu"; String estático privado UserName = "root"; String static privado contraseña = ""; static {try {class.forname ("com.mysql.jdbc.driver"); } catch (Exception e) {E.PrintStackTrace (); }} Public Static Connection getConnection () {Connection Conn; intente {conn = drivermanager.getConnection (url, nombre de usuario, contraseña); devolver Conn; } Catch (Sqlexception e) {E.PrintStackTrace (); } return null; } Public static void Release (ResultSet RS, PreparpentStatement PS, Connection Conn) {if (rs! = null) {try {rs.close (); } Catch (Sqlexception e) {E.PrintStackTrace (); }} if (ps! = null) {try {ps.close (); } Catch (Sqlexception e) {E.PrintStackTrace (); }} if (conn! = null) {try {conn.close (); } Catch (Sqlexception e) {E.PrintStackTrace (); }}}} Blogdao de clase pública {// registros para cada página, pase en cada índice de inicio de página y tamaño de cada página para la paginación, es decir, dos parámetros de límite (mySQL Paging se usa para el límite) Lista pública <Blog> getPagerecord (int PageNOSTArt, int PageSize) {Connection Conn = jdbcutil.getConnection ();; Preparado PS = NULL; ResultSet rs = null; Cadena sql = "seleccionar * desde el límite de blog?,?"; List <Blog> list = new ArrayList <Blog> (); intente {ps = conn.preparestatement (sql); Ps.SetInt (1, PagenosStart); Ps.SetInt (2, PageSize); rs = ps.ExecuteQuery (); while (rs.next ()) {blog blog = nuevo blog (); Blog.SetId (rs.getInt ("id")); blog.setCategory_id (rs.getInt ("category_id")); Blog.settitle (rs.getString ("título")); blog.setContent (rs.getString ("contenido")); blog.setCreated_time (rs.getDate ("create_time")); list.add (blog); } Lista de retorno; } Catch (Sqlexception e) {E.PrintStackTrace (); } Finalmente {jdbcutil.Release (RS, PS, Conn); } return null; } // Número total de registros public int getTotal () {Connection conn = jdbcutil.getConnection (); Preparado PS = NULL; ResultSet rs = null; intente {ps = conn.prepareStatement ("Seleccione Count (*) del blog"); rs = ps.ExecuteQuery (); if (rs.next ()) {return rs.getInt (1); }} Catch (SQLException e) {E.PrintStackTrace (); } Finalmente {jdbcutil.Release (RS, PS, Conn); } return 0; }}Capa de servicio
Public Class BlogService {Blogdao Blogdao = new Blogdao (); // Devuelve la página, toda la información requerida para la paginación Vaya a PageBean para encontrar el blog público FindPagerecord (int pageno) {int totalRecord = blogdao.gettotal (); BlogPage BlogPage = New BlogPage (Pageno, TotalRecord); List <Blog> List = Blogdao.getPagerecord (BlogPage.getPageStart (), blogPage.getPageSize ()); BlogPage.SetPagerecord (lista); RETURN BLOGPAGE; }}clase de servlet
@WebServlet ("/BlogSplitServlet") BlogSplitServlet de clase pública extiende httpservlet {public void doget (httpservletRequest request, httpServletResponse respuesta) lanza servletException, ioexception {request.setcharacteriCoding ("UTF-8"); respuesta.setContentType ("text/html; charset = utf-8"); Cadena pagenostr = request.getParameter ("Pageno"); // La primera vez que accede a ServletPagenostr es nulo, dar un valor inicial, es decir, se accede a la primera página por defecto int pageno = 1; if (pagenostr! = null) pageno = integer.parseInt (pagenostr); BlogService Service = New BlogService (); BlogPage BlogPage = Service.FindPagerecord (Pageno); request.setAttribute ("BlogPage", BlogPage); request.getRequestDispatcher ("/BlogPage.jsp"). Foring (Solicitar, respuesta); } public void dopost (httpservletRequest solicitud, respuesta httpservletreSponse) lanza ServletException, ioexception {doget (solicitud, respuesta); }} De esta manera, toda la información de la paginación se encapsulará en el PageBean
La implementación de JSP solo necesita recuperar la información en PageBean
Mi implementación JSP (Ligerui simulada) se proporciona a continuación
<%@ page lenguaje = "java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8"%> <%@ page import = "java.util.*, model.blog, model.blogpage"%> <! Doctype html público "-// w3c // dtd html 4.01 transicional /////////////////AN/ "http://www.w3.org/tr/html4/loose.dtd"> podet La opción es consistente con la página actual select = document.getElementById ("Seleccionar"); pageno = '$ {BlogPage.Pageno}'; select.options [pageno - 1] .selected = 'seleccionado'; } // Seleccionar la función de salto de lista desplegable selectJump () {var pageno = select.selectedIndex + 1; Window.location.href = "http: // localhost/jsppagesplit/blogsplitservlet? pageno =" + pageno; } // Text Jump, Evento Onblur, el cuadro de entrada pierde el enfoque, función textJump () {var pageno = document.getElementById ("text"). valor; Window.location.href = "http: // localhost/jsppagesplit/blogsplitservlet? pageno =" + pageno; } </script> </head> <body> <% BlogPage BlogPage = (BlogPage) request.getAttribute ("BlogPage"); List <Blog> List = BlogPage.GetPagerecord (); // La última página está llena de filas en blanco. Si no se llena, el número de filas de la última tabla de página TR es inconsistente con la anterior. Es feo if (list.size () <blogPage.getPageSize ()) {for (int i = list.size (); i <blogPage.getPageSize (); i ++) list.Add (null); } %> <div> <table cellPacing = "0" bgcolor = "#cef0c5"> <tr> <tr> <td> id </td> <td> title </td> <td> content </td> <td> tiempo de creación </td> </tr> < %para (blog de blog: lista) {if! = Blog) {%> <tr> <TD> <%= Blog.getId ()%> </td> <td> <%= blog.gettitle ()%> </td> <td> <%= blog.getContent ()%> </td> <td> <%= blog.getCreated_time ()%> </td> </tr> <!-Last Page Línea en blanco llena-<%} más <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <%}}%> </table> <div style = "altura: 50px; fondo-color: #4b7db3; línea-diight: 40px;"> <!-Select Down Box-Select Box-Select "Select" Select "Select" Select "Select" Select "Select" Select "Select" Select " <%para (int i = 1; i <= blogPage.getToTalPage (); i ++) {%> <opción onClick = "selectJump ()"> <%= i%> </opción> <%}%> </select> <a href = "$ {pageContext.Request.contextpathpath href = "$ {PageContext.Request.ContextPath}/BlogSplitServlet? Pageno = <%= BlogPage.getPageno ()-1 <1? BlogPage.getPageno (): Blogpage.getPageno ()-1%>"> Página anterior </a> <input type = "Text" Id = "Text" sizal "1" 1px "1px" 1px " valor = "$ {BlogPage.Pageno}" onblur = "textJump ()">/$ {BlogPage.TotalPage} <a href = "$ {PageContext.Request.ContextPath}/BlogSplitServlet? Pageno = <%= BlogPage.getPageno ()+1> BlogPage.getToTalPage ()? BlogPage.getPageno (): BlogPage.getPageno ()+1%>" href = "$ {PageContext.Request.ContextPath}/BlogSplitServlet? Pageno = <%= BlogPage.GetToTalPage ()%>"> Última página </a> <div style = "flotante:"> Muestra $ {BlogPage.PageStart+1} para $ {BlogPage.Pageno == BlogPage.TotalPage? BlogPage.TotalRecord: BlogPage.PageSize}, se muestran un total de $ {BlogPage.Totalrecord}. Se muestra cada página. </div> </div> </div> </body> </html> Esta es la última mirada. El estilo se ajusta aproximadamente y la función es exactamente la misma que la paginación predeterminada de Ligerui.
Cambie el código en JSP a una etiqueta (JSTL, se debe introducir el paquete JAR correspondiente) y coloque el relleno de la última página en el JSP en Servlet.
Agregado al servlet
// La última página está llena de filas en blanco. Si no se llena, el número de filas en la última tabla de página TR es inconsistente con la anterior. List <Blog> List = BlogPage.GetPagerecord (); if (list.size () <blogPage.getPageSize ()) {for (int i = list.size (); i <blogPage.getPageSize (); i ++) list.add (null); } BlogPage.SetPagerecord (List);página de JSP
<%@ page lenguaje = "java" contentType = "text/html; charset = utf-8" PageEncoding = "utf-8"%> <%@ page import = "java.util.*, model.blog, model.blogpage"%> <%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c"%> <! DocType html public "-// w3c // dtd html 4.01 Transitional // en" http://www.w3.org/tr/html4/loose.dtd"><html><head><title >inert title aquí </title> <titure type = "text/" jawaScript " Función de salto de lista desplegable selectJump () {var select = document.getElementById ("Seleccionar"); var pageno = select.selectedIndex + 1; Window.location.href = "http: // localhost/jsppagesplit/blogsplitservlet? pageno =" + pageno; } // Text Jump, Evento Onblur, function textJump () {var pageno = document.getElementById ("text"). valor; Window.location.href = "http: // localhost/jsppagesplit/blogsplitservlet? pageno =" + pageno; } </script> </head> <body> <div> <table cellPacing = "0" bgcolor = "#cef0c5"> <tr> <tr> <td> id </td> <td> title </td> <td> content <//td> time de creación <///td </tr> <c: items = "$ {blog.p.page. varstatus = "vs"> <c: if test = "$ {c! = null}"> <tr> <td> $ {c.id} </td> <td> $ {c.title} </td> <td> $ {c.content} </td> <td> $ {c.created_time} </td> </tr> </th/cho: Página de relleno de línea en blanco-> <c: if test = "$ {c == null}"> <tr> <tr> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> </tr> </c: if> </c: foreach> </port <beh <burnil style = "Height: 50px; Background-Color: #4B7DB3; Line-Height: 40px;"> <!-Seleccione el cuadro desplegable-> <select id = "select"> <c: foreach begin = "1" end = "$ {BlogPage.totalpage}" var = "i"> <Opción valor = "$ {i" onClick = "SelectJump ()" ")" ")") ")") ")") ") $ {BlogPage.Pageno == i? 'Seleccionado = "Seleccionado"': ''}> $ {i} </pection> </c: foreach> </select> <a href = "$ {pageContext.request.contextpath}/BlogSpletlet? Pageno = 1"> Home </a> <A a a. href = "$ {PageContext.Request.ContextPath}/BlogSplitServlet? Pageno = $ {BlogPage.Pageno-1 <1? BlogPage.Pageno: BlogPage.Pageno-1}"> Página anterior </a> <Incry tipo = "Texto" Id = "Texto" Tamaño = "1px" Valor = "$ {" BlogPage. onblur = "textJump ()">/$ {blogPage.totalPage} <a href = "$ {pageContext.request.contextPath}/blogsplitservlet? Pageno página </a> <a href = "$ {pageContext.request.contextPath}/blogsplitservlet? pageno = $ {blogPage.totalPage}"> Última página </a> <div style = "float: correcto;"> muestra $ {blogPage.Pagenostart+1} para $ {BlogPage.Pageno == BlogPage.TotalPage? BlogPage.TotalRecord: BlogPage.PageSize}, se muestran un total de $ {BlogPage.Totalrecord}. Se muestra cada página. </div> </div> </div> </body> </html>En uso real, puede escribir páginas JSP de acuerdo con sus necesidades, pero el código de fondo es básicamente general
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.