L'implémentation frontale utilise ligerui pour implémenter la pagination. Il estime que l'utilisation du cadre est vraiment simple et c'est ennuyeux. Il simule l'interface de pagination de Liger et l'implémente (tant qu'elle est une fonction, il ignore le style)
Ici, nous utilisons l'architecture de base à trois couches + servlet + JSP pour l'implémenter. L'idée est très simple. Écrivez toutes les informations liées à la pagination dans une classe PageBean. Le service renvoie cette classe Bean. Chaque fois que la requête de pagination est recherchée, les informations sont trouvées à partir du haricot. Cependant, les détails sont assez compliqués, comme le traitement des limites (les limites frontales et les limites back-end doivent être traitées), la page actuelle doit être affichée après les sauts de boîte déroulante, etc.
Ceci est le style de pagination mis en œuvre par ligerui (le processus d'implémentation a été écrit dans mon blog précédent: //www.vevb.com/article/92850.htm)
Processus de mise en œuvre de la simulation:
Structure de répertoire
Base de données (MySQL)
La couche de modèle, une base de données correspondant au modèle (blog) et un PageBean (page de blog)
Importer java.sql.date; blog de classe publique {private int id; private int category_id; titre de chaîne privée; Contenu de chaîne privé; Date privée Created_time; // Getter et Setter Methods @Override public String toString () {return "blog [id =" + id + ", catégorie_id =" + catégorie_id + ", contenu =" + contenu + ", créé_time =" + créé_time + "]"; }} classe publique Blogpage {Liste privée <Logt> PageRecord; // Enregistrer pour chaque page private int pageno; // la page actuelle private int pagenostart; // chaque page Démarrer l'index privé int pageSize = 5; // combien de données par page private totalrecord; // total enregistre considérés comme des informations existantes ce.totalRecord = totalRecord; // Calculez le nombre total de pages TotalPage = (TotalRecord% pagesize == 0)? TotalRecord / PageSize: TotalRecord / PageSize + 1; // Traitement de la bordure de Pageno if (pageno <= 1) this.pageno = 1; else if (pageno> = totalpage) this.pageno = totalpage; else this.pageno = pageno; // Calculez l'index de chaque page, c'est-à-dire l'index des premières données de chaque page, utilisé pour la requête de pagination pagenostart = (this.pageno-1) * pagesize; } public int getpagenostart () {return pagenostart; } public void setPagenostart (int pagenostart) {this.pagenostart = pagenostart; } public list <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 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; }} Couche DAO
JDBCutil résume les opérations de connexion et de libération de JDBC
classe publique jdbcutil {private static string url = "jdbc: mysql: // localhost: 3306 / blogs_stu"; Nom de chaîne statique privée = "root"; String statique privé Password = ""; statique {try {class.forname ("com.mysql.jdbc.driver"); } catch (exception e) {e.printStackTrace (); }} Connexion statique publique getConnection () {connexion conn; essayez {conn = driverManager.getConnection (URL, nom d'utilisateur, mot de passe); Retourne Conn; } catch (sqlexception e) {e.printStackTrace (); } return null; } Public static void release (resultSet rs, préparestatement ps, connexion 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 (); }}}} classe publique blogdao {// Enregistre pour chaque page, passez dans chaque page Démarrer l'index et chaque taille de page pour la pagination, c'est-à-dire deux paramètres de limite (MySQL Paging est utilisé pour Limit) Liste publique <LOGOD> GetPageRecord (int Pagenostart, int pagesize) {Connection Conn = JDBCutil.getConnection (); PréparedStatement PS = null; ResultSet rs = null; String sql = "Select * From Blog Limit? ,?"; List <blog> list = new ArrayList <LOGOD> (); essayez {ps = conn.preparestatement (sql); Ps.SetInt (1, Pagenostart); ps.sentInt (2, pagesize); rs = ps.ExecuteQuery (); while (Rs.Next ()) {blog blog = nouveau blog (); blog.setid (Rs.getInt ("id")); blog.setCategory_id (Rs.getInt ("catégorie_id")); blog.setTitle (Rs.getString ("Title")); blog.setContent (Rs.getString ("Content")); blog.setCreated_time (Rs.GetDate ("Created_time")); list.add (blog); } Retour List; } catch (sqlexception e) {e.printStackTrace (); } Enfin {jdbcutil.release (RS, PS, Conn); } return null; } // Nombre total de dossiers public int GetTotal () {connexion conn = jdbcutil.getConnection (); PréparedStatement PS = null; ResultSet rs = null; essayez {ps = conn.prepareStatement ("SELECT COUNT (*) FROM BLOG"); rs = ps.ExecuteQuery (); if (Rs.Next ()) {return Rs.getInt (1); }} catch (sqlexception e) {e.printStackTrace (); } Enfin {jdbcutil.release (RS, PS, Conn); } return 0; }}Couche de service
classe publique blogService {blogdao blogdao = new blogdao (); // RETOUR PageBean, toutes les informations requises pour la pagination vont à la pageBean pour trouver la page de blog public findPageRecord (int pageno) {int totalRecord = blogdao.gettotal (); BlogPage BlogPage = Nouvelle page de blog (Pageno, TotalRecord); List <glog> list = blogdao.getPageRecord (blogPage.getPagenostart (), blogPage.getPageSize ()); blogPage.SetPageRecord (liste); retourner la page de blog; }}classe de servlet
@Webservlet ("/ blogsplitservlet") Blogsplitservlet de classe publique étend httpservlet {public void doget (httpservletRequest request, httpservletResponse réponse) lève ServletException, ioException {request.SetcharacteRencoding ("utf-8"); Response.SetContentType ("Text / HTML; charSet = UTF-8"); String pagenoStr = request.getParameter ("pageno"); // La première fois que vous accédez à Servletpagenostr est nul, donnez une valeur initiale, c'est-à-dire que la première page est accessible par défaut int pageno = 1; if (pagenoStr! = null) pageno = Integer.ParseInt (pagenostr); BlogService Service = nouveau BlogService (); BlogPage BlogPage = Service.FindPageRecord (Pageno); request.setAttribute ("Blogpage", blogpage); request.getRequestDispatcher ("/ blogpage.jsp"). Forward (demande, réponse); } public void doPost (requête HttpServletRequest, réponse httpservletResponse) lève ServletException, ioException {doget (request, réponse); }} De cette façon, toutes les informations de pagination seront encapsulées dans le PageBean
L'implémentation JSP n'a besoin que de récupérer les informations du PageBean
Mon implémentation JSP (ligerui simulé) est donnée ci-dessous
<% @ page Language = "Java" ContentType = "Text / Html; charSet = UTF-8" Pageencoding = "UTF-8"%> <% @ Page Import = "Java.util. *, Model.blog, Model.blogPage"%> <! Doctype HTML Public "- // W3C // DTD HTML 4.01 Transitional / En" "http://www.w3.org/tr/html4/loose.dtd"><html><head><meta http-equiv =" contenu-type "contenu =" text / html; charset = utf-8 "> <tapie> insert le titre ici </ title> <script type =" text / javascript ">. L'option Select est cohérente avec la page actuelle SELECT = Document.GetElementById ("SELECT"); pageno = '$ {blogpage.pageno}'; select.options [pageno - 1] .selected = 'selected'; } // Sélectionnez la fonction de saut de liste déroulante SelectJump () {var pageno = select.selectedIndex + 1; window.location.href = "http: // localhost / jsppagesplit / blogsplitservlet? pageno =" + pageno; } // Text Jump, événement OnBlur, la zone d'entrée perd focus, fonction textJump () {var pageno = document.getElementById ("texte"). valeur; window.location.href = "http: // localhost / jsppagesplit / blogsplitservlet? pageno =" + pageno; } </ script> </ head> <body> <% blogpage blogpage = (blogpage) request.getAttribute ("blogpage"); List <blog> list = blogPage.getPageRecord (); // La dernière page est remplie de lignes vides. S'il n'est pas rempli, le nombre de lignes du dernier tableau Page TR est incompatible avec le précédent. Il est laid if (list.size () <blogPage.getPageSize ()) {for (int i = list.size (); i <blogPage.getPageSize (); i ++) list.add (null); }%> <div> <table cellpacing = "0" bgcolor = "# cef0c5"> <tr> <td> id </td> <td> title </td> <td> contenu </td> <td> Time de création </ td> </ tr> <% for (blog: list) {if (blog! = null) {%> <td> <% = blog.getId ()%> </td> <td> <% = blog.getTitle ()%> </td> <td> <% = blog.getContent ()%> </td> <td> <% = blog.getcreated_time ()%> </td> </tr> <! - Last Page Blank Fouling Line -> <%} <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <%}} %> </s table> <div style = "height: 50px; background-colore: # 4b7db3; Line-Height: 40px;"> <! id = "select"> <% pour (int i = 1; i <= blogPage.getTotalPage (); i ++) {%> <option onClick = "selectJump ()"> <% = i%> </ option> <%} %> </lect> <a href = "$ {pagecontex href = "$ {pagecontext.request.contextpath} / blogsplitservlet? pageno = <% = blogpage.getpageno () - 1 <1? blogpage.getpageno (): blogPage.getPageNo () - 1%>"> Page précédente </a> value = "$ {blogpage.pageno}" onblur = "textJump ()"> / $ {blogpage.totalpage} <a href = "$ {pagecontext.request.contextpath} / blogsplitservlet? pageno = <% = blogpage.getpageno () + 1> blogpage.getTotalPage ()? blogpage.getpageno (): blogpage.getpageno () + 1 %>"> page suivante </a> href = "$ {pagecontext.request.contextPath} / blogsplitservlet? pageno = <% = blogpage.gettotalpage ()%>"> dernière page </a> <div style = "float: right;"> show $ {blogpage.pagenostart + 1} to to $ {blogpage.pageno == blogpage.totalpage? blogpage.totalrecord: blogpage.pageSize}, un total de $ {blogpage.totalrecord} des barres sont affichées. Chaque page s'affiche. </div> </div> </div> </ body> </html> C'est le dernier regard. Le style est à peu près ajusté et la fonction est exactement la même que la pagination par défaut de ligerui.
Modifiez le code dans JSP en une balise (JSTL, le package JAR correspondant doit être introduit) et mettez le dernier remplissage de page dans le JSP en servlet.
Ajouté au servlet
// La dernière page est remplie de lignes vides. S'il n'est pas rempli, le nombre de lignes dans la dernière page Table TR est incompatible avec le précédent. List <blog> list = blogPage.getPageRecord (); if (list.size () <blogPage.getPageSize ()) {for (int i = list.size (); i <blogPage.getPageSize (); i ++) list.add (null); } blogPage.SetPageRecord (liste);page jsp
<% @ page Language = "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/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> title ici </ title> <priss Fonction Drop-down List Jump SelectJump () {var select = document.getElementById ("SELECT"); var pageno = select.selectedIndex + 1; window.location.href = "http: // localhost / jsppagesplit / blogsplitservlet? pageno =" + pageno; } // Text Jump, événement onBlur, fonction textJump () {var pageno = document.getElementById ("text"). valeur; window.location.href = "http: // localhost / jsppagesplit / blogsplitservlet? pageno =" + pageno; } </ script> </ head> <body> <div> <table cellpacing = "0" bgcolor = "# cef0c5"> <tr> <td> id </td> <td> title </td> <td> contenu </td> <td> Time de création </td> </ tr> vastatus = "vs"> <c: if test = "$ {c! = null}"> <tr> <td> $ {c.id} </td> <td> $ {C.Title} </td> <td> $ {C.Content} </td> <td> $ {C.Created_time} </td> Page Blank Line Remplissage -> <C: if test = "$ {c == null}"> <tr> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> </tr> </c: if> </c: forach> </ Table> Style = "Height: 50px; Background-Color: # 4B7DB3; Line-Height: 40px;"> <! - Sélectionnez Drop-Down Box -> <Select id = "Select"> <C: ForEach Begun = "1" end = "$ {blogpage.totalpage}" var = "i"> <Option Value = "$ {i}" OnClick = "SELECTJump ()") $ {blogpage.pageno == i? 'sélectionné = "sélectionné"': ''}> $ {i} </ option> </c: foreach> </lect> <a href = "$ {pageContex href = "$ {pagecontext.request.contextpath} / blogsplitservlet? pageno = $ {blogpage.pageno-1 <1? BlogPage.pageno: blogpage.pageno-1}"> page précédente </a> <entrée type = "text" id = "text" size = "1px" value = "value =" $ {blogPage.page " onblur = "textJump ()"> / $ {blogpage.totalpage} <a href = "$ {pageContex Page </a> <a href = "$ {pagecontext.request.contextPath} / blogsplitservlet? pageno = $ {blogpage.totalpage}"> dernière page </a> <div style = "float: right;" shows $ {blogPage.pagenostart + 1} to to $ {blogpage.pageno == blogpage.totalpage? blogpage.totalrecord: blogpage.pageSize}, un total de $ {blogpage.totalrecord} des barres sont affichées. Chaque page s'affiche. </div> </div> </div> </ body> </html>En usage réel, vous pouvez écrire des pages JSP en fonction de vos besoins, mais le code d'arrière-plan est essentiellement général
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.