A implementação do front-end usa o Ligerui para implementar a paginação. Parece que o uso da estrutura é realmente simples e é chato. Ele simula a interface de paginação de Liger e a implementa (desde que seja uma função, ignora o estilo)
Aqui, usamos a arquitetura básica de três camadas + servlet + jsp para implementá-lo. A ideia é muito simples. Escreva todas as informações relacionadas à paginação em uma classe de página. O serviço retorna esta aula de feijão. Cada vez que a consulta de paginação é pesquisada, as informações são encontradas no feijão. No entanto, os detalhes são bastante complicados, como o processamento de limites (os limites do front-end e do back-end precisam ser processados), a página atual deve ser exibida após os saltos da caixa suspensa, etc.
Este é o estilo de paginação implementado pelo Ligerui (o processo de implementação foi escrito no meu blog anterior: //www.vevb.com/article/92850.htm)
Processo de implementação da simulação:
Estrutura de diretório
Banco de dados (MySQL)
A camada de modelo, um banco de dados correspondente ao modelo (blog) e um PageBean (página do blog)
importar java.sql.date; public classe blog {private int id; private int category_id; título de sequência privada; conteúdo privado de string; data privada criada_time; // Métodos getter e setter @Override public String tostring () {return "blog [id =" + id + ", category_id =" + category_id + ", content =" + content + ", criate_time =" + criate_time + "]"; }} public class BlogPage {Lista privada <blog> PageRecord; // Registre para cada página Private Int pageno; // A página atual Private Int Pagenostart; // Cada página Inicie o índice privado int PAGESSIZE = 5; // quanto dados por página private Int Totalrecord; // Total Records private intPage; informações this.TotalRecord = totalRecord; // Calcule o número total de páginas TotalPage = (TotalRecord%PageSize == 0)? TotalRecord/PagageSize: TotalRecord/Pagesize+1; // Processamento de fronteira de pageno if (pageno <= 1) this.pageno = 1; caso contrário, if (pageno> = totalpage) this.pageno = totalpage; senão this.pageno = pageno; // Calcule o índice de cada página, ou seja, o índice dos primeiros dados de cada página, usada para consulta de paginação pagenostart = (this.pageno-1)*Pagesize; } public int getPagenostart () {return pagenostart; } public void setPageNostart (int pagenostart) {this.pageNostart = pagenostart; } list public <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 pagageSize; } public void setPagesize (int PAGESIZE) {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; }} Camada dao
O JDBCutil encapsula as operações de conexão e liberação do JDBC
classe pública jdbcutil {private static string url = "jdbc: mysql: // localhost: 3306/blogs_stu"; String estática privada nome de usuário = "root"; String estática privada senha = ""; static {try {class.formoname ("com.mysql.jdbc.driver"); } catch (Exceção e) {e.printStackTrace (); }} conexão estática pública getConnection () {conexão conn; tente {conn = driverManager.getConnection (URL, nome de usuário, senha); retornar Conn; } catch (sqLexception e) {e.printStackTrace (); } retornar nulo; } public static void Release (ResultSet RS, preparado PS, conexão conn) {if (rs! = null) {try {rs.close (); } catch (sqLexception e) {e.printStackTrace (); }} if (ps! = null) {tente {ps.close (); } catch (sqLexception e) {e.printStackTrace (); }} if (conn! = null) {try {Conn.Close (); } catch (sqLexception e) {e.printStackTrace (); }}}} public classe blogdao {// registra para cada página, passe em cada página Iniciar o índice e cada tamanho da página para a paginação, ou seja, dois parâmetros de limite (a paginação MySQL é usada para limite) Lista pública <blog> getPageRecord (int pageNostart, intage PagageSize) {Connection Conn = jdbcutil.getConnection (); Preparado estatement ps = null; ResultSet rs = null; String sql = "Selecione * do limite do blog?"; List <blog> List = new ArrayList <Blog> (); tente {ps = Conn.Preparestatement (SQL); ps.setInt (1, pagenostart); ps.SetInt (2, Pagesize); rs = ps.executeQuery (); while (rs.Next ()) {blog = new Blog (); blog.setId (rs.getInt ("id")); blog.setCategory_id (rs.getint ("category_id")); blog.settitle (rs.getString ("title")); blog.setContent (rs.getString ("content")); blog.setcreated_time (rs.getdate ("criou_time")); list.add (blog); } Lista de retorno; } catch (sqLexception e) {e.printStackTrace (); } finalmente {jdbcutil.release (rs, ps, conn); } retornar nulo; } // Número total de registros public int getTotal () {conexão conn = jdbcutil.getConnection (); Preparado estatement ps = null; ResultSet rs = null; tente {ps = Conn.Preparestatement ("Selecionar contagem (*) do blog"); rs = ps.executeQuery (); if (rs.Next ()) {return rs.getInt (1); }} catch (sqLexception e) {e.printStackTrace (); } finalmente {jdbcutil.release (rs, ps, conn); } retornar 0; }}Camada de serviço
public class BlogService {blogdao blogdao = new BlogDao (); // Return PageBean, todas as informações necessárias para a paginação vão para o PageBean para encontrar a página do blog pública FindPageRecord (int pageno) {int totalRecord = blogdao.gettotal (); BlogPage BlogPage = New BlogPage (Pageno, TotalRecord); List <blog> List = blogDao.getPageRecord (blogpage.getpagenostart (), blogpage.getPagesize ()); blogpage.setPageRecord (List); retornar a página do blog; }}Classe de servlet
@WebServlet ("/blogSplitServlet") Classe pública BlogSplitServlet estende httpServlet {public void Doget (solicitação httpServletRequest, httpServletResponse) lança servletexception, IoException {request.SetchAracterCodinging ("utf-8"); Response.setContentType ("Texto/html; charset = utf-8"); String pagenostr = request.getParameter ("pageno"); // A primeira vez que você acessa o servletpagenoStr é nulo, dê um valor inicial, ou seja, a primeira página é acessada por padrão int pageno = 1; if (pagenostr! = null) pageno = integer.parseint (pagenoStr); Serviço blogService = new BlogService (); BlogPage BlogPage = Service.findPageRecord (Pageno); request.setAttribute ("BlogPage", BlogPage); request.getRequestDispatcher ("/blogpage.jsp"). Forward (solicitação, resposta); } public void DoPost (solicitação httpServletRequest, httpServletResponse resposta) lança servletexception, ioexception {doget (solicitação, resposta); }} Dessa forma, todas as informações de paginação serão encapsuladas no PageBean
A implementação do JSP precisa apenas recuperar as informações no PageBean
Minha implementação JSP (simulada ligerui) é dada abaixo
<%@ página linguagem = "java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8"%> <%@ página import = "java.util.*, model.blog, model.blogpage"%> <! "http://www.w3.org/tr/html4/loose.dtd"><html> <head><meta http-equiv =" content-type "content =" text/html; charset = utf-8 "> <titled> title title </title. que a opção Selecionar é consistente com a página atual select = document.getElementById ("selecione"); pageno = '$ {blogpage.pageno}'; select.Options [Pageno - 1] .Selected = 'Selected'; } // Selecione Função de salto suspenso Lista selectJump () {var pageno = select.SelectedIndex + 1; window.Location.href = "http: // localhost/jsppagesplit/blogsplitServlet? pageno =" + pageno; } // salto de texto, evento onblur, a caixa de entrada perde foco, função textjump () {var pageno = document.getElementById ("text"). value; window.Location.href = "http: // localhost/jsppagesplit/blogsplitServlet? pageno =" + pageno; } </script> </ad Head> <body> <% blogpage blogpage = (blogpage) request.getAttribute ("blogpage"); List <blog> List = BlogPage.getPageRecord (); // A última página é preenchida com linhas em branco. Se não for preenchido, o número de linhas da última página da tabela TR é inconsistente com a anterior. É feio se (list.size () <blogpage.getPagesize ()) {for (int i = list.size (); i <blogpage.getPagesize (); i ++) list.add (null); } %> <div> <tabela celularpacing = "0" bgcolor = "#CEF0C5"> <tr> <td> id </td> <td> title </td> <td> content </td> <td> tempo de criação </td> </tr> < %para (blog: list) {se (blog! = n) <Td> <%= blog.getId ()%> </td> <td> <%= blog.gettitle ()%> </td> <td> <%= blog.getContent ()%> </td> <td> <%= blog.getcreated_time ()%> <Td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <%}}%> </tabela> <div estilo = "altura: 50px; background-color: #4b7db3; <%para (int i = 1; i <= blogpage.gettotalPage (); i ++) {%> <option onclick = "selectJump ()"> <%= i%> </pption> <%}%> </select> <a href = "$ {PagECONTEXT? href = "$ {PageContext.Request.ContextPath}/BlogSplitServlet? value = "$ {blogpage.pageno}" onblur = "textjump ()">/$ {blogpage.totalpage} <a href = "$ {PageContext.Request.ContextPath}/BlogSplitServlet? href = "$ {PageContext.request.ContextPath}/blogSplitServlet? $ {blogpage.pageno == blogpage.totalpage? blogpage.totalrecord: blogpage.pagesize}, é exibido um total de barras de $ {blogpage.totalrecord}. Cada página é exibida. </div> </div> </div> </body> </html> Este é o último visual. O estilo é ajustado aproximadamente e a função é exatamente a mesma que a paginação padrão do Ligerui.
Altere o código no JSP para uma tag (JSTL, o pacote JAR correspondente precisa ser introduzido) e coloque o preenchimento da última página no JSP no Servlet.
Adicionado ao servlet
// A última página é preenchida com linhas em branco. Se não for preenchido, o número de linhas na última página da tabela TR é inconsistente com a 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 JSP
<%@ Page Language = "java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8"%> <%@ página import = "Java.util. prefix = "c"%> <! Doctype html public "-// w3c // dtd html 4.01 transitória // pt" "http://www.w3.org/tr/html4/loose.dtd"html> theTTHIPSTLETLEIRSERSTLEMERSTL4/LOOSE.DTD"html> theTtlestle> Função de salto de lista suspensa selectJump () {var select = document.getElementById ("select"); var pageno = select.SelectedIndex + 1; window.Location.href = "http: // localhost/jsppagesplit/blogsplitServlet? pageno =" + pageno; } // salto de texto, evento onblur, função textjump () {var pageno = document.getElementById ("text"). value; window.Location.href = "http: // localhost/jsppagesplit/blogsplitServlet? pageno =" + pageno; } </script> </ad Head> <body> <div> <tabela celularpacing = "0" bgcolor = "#cef0c5"> <tr> <td> id </td> <td> title </td> <td> content </td> <td> tempo de criação </td> <. varstatus = "vs"> <c: se test = "$ {c! = null}"> <tr> <td> $ {c.id} </td> <td> $ {c.title} </td> <td> $ {c.content} </td> <td> td $ {C.Creoun_time_tytled_tytled_tytled_tytled_tytled_tytled_tytled_tytled_tytled_tytled_tytled_tytled_tytled_tytled_tytled_tytled_tytled_tytled_tytled_tytled {C.Cret> preenchimento de linha em branco-> <c: se test = "$ {c == null}"> <tr> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <Td> </td> </tr> </c: se> #4b7db3; altura da linha: 40px; "> <!-selecione caixa suspensa-> <select id =" select "> <c: foreach Begin =" 1 "end =" $ {blogpage.totalpage} "var =" i "> <opção value =" $ {i} "onClick =" selectJump () " $ {blogpage.pageno == i? 'Selected = "Selected"': ''}> $ {i} </pption> </c: foreach> </leclect> <a href = "$ {pageContext.request.Contextpath}/blogsplitlettlet? href = "$ {PageContext.Request.ContextPath}/BlogSplitServlet? Pageno = $ {BlogPage.pageno-1 <1? BlogPage.pageno: blogpage.pageno-1}"> Page </a> <input Type = "text" odp = "Tizes onblur = "textJump ()">/$ {blogpage.totalpage} <a href = "$ {PagEcontext.request.ContextPath}/blogsplitSertLe? <a href = "$ {PageContext.request.ContextPath}/BlogSplitServlet? $ {blogpage.pageno == blogpage.totalpage? blogpage.totalrecord: blogpage.pagesize}, é exibido um total de barras de $ {blogpage.totalrecord}. Cada página é exibida. </div> </div> </div> </body> </html>Em uso real, você pode escrever páginas JSP de acordo com suas necessidades, mas o código de fundo é basicamente geral
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.