Die Front-End-Implementierung verwendet Ligerui, um Paging zu implementieren. Es fühlt sich an, dass die Verwendung des Frameworks wirklich einfach ist und langweilig ist. Es simuliert die Paging -Grenzfläche von Liger und implementiert sie (solange es eine Funktion ist, ignoriert es den Stil)
Hier verwenden wir die grundlegende Dreischichtarchitektur + Servlet + JSP, um sie zu implementieren. Die Idee ist sehr einfach. Schreiben Sie alle Paging-bezogenen Informationen in eine Seitenklasse. Der Service gibt diese Bohnenklasse zurück. Jedes Mal, wenn die Paging -Abfrage durchsucht wird, finden Sie die Informationen aus der Bohne. Die Details sind jedoch ziemlich kompliziert, wie z. B. Grenzverarbeitung (sowohl Front-End- als auch Back-End-Grenzen müssen verarbeitet werden), die aktuelle Seite muss nach dem Dropdown-Box-Jumps usw. angezeigt werden.
Dies ist der von Ligerui implementierte Paginierungsstil (der Implementierungsprozess wurde in meinem vorherigen Blog geschrieben: //www.vevb.com/article/92850.htm)
Implementierungsprozess von Simulation:
Verzeichnisstruktur
Datenbank (MySQL)
Die Modellschicht, eine Datenbank, die dem Modell (Blog) und einer Seitenbekette (Blogpage) entspricht, und)
importieren java.sql.date; public class blog {private int id; private int category_id; privater String -Titel; private String -Inhalte; privates Datum erstellt_time; // Getter- und Setter -Methoden @Override public String toString () {return "blog [id =" + id + ", category_id =" + category_id + ", content =" + content + ", erstellte_time =" + created_time + "]"; }} public class BlogPage { private List<Blog> pagerecord;//Record for each page private int pageno;//The current page private int pagenostart;//Each page start index private int pagesize=5;//How much data per page private int totalrecord;//Total records private int totalpage;//Total pages public BlogPage(int pageno,int totalrecord){ //pageno totalrecord can be als vorhandene Information angesehen. TotalRecord = TotalRecord; // Berechnen Sie die Gesamtzahl der Seiten TotalPage = (TotalRecord%PageSize == 0)? TotalRecord/PageSize: TotalRecord/PageSize+1; // Grenzverarbeitung von Pageno if (pageno <= 1) this.pageno = 1; sonst wenn (pageno> = Gesamtpage) this.pageno = TotalPage; sonst this.pageno = pageno; // Berechnen Sie den Index jeder Seite, dh den Index der ersten Daten jeder Seite, die für Pagination Query pagenstart = (this.pageno-1)*pageSize verwendet wird; } public int getPaGenostart () {return paGenostart; } public void setpagenostart (int pagenStart) {this.pagenostart = pagenSostart; } publiclist <blog> getPagereCord () {return panecord; } 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 setotalpage (int TotalPage) {this.totalPage = TotalPage; }} DAO -Schicht
JDBCUTIL verkauft die Verbindung von JDBC und Release -Operationen
public class jdbcutil {private static String url = "jdbc: mysql: // localhost: 3306/blogs_stu"; private statische String username = "root"; private statische String -Passwort = ""; static {try {class.forname ("com.mysql.jdbc.driver"); } catch (Ausnahme e) {e.printstacktrace (); }} öffentliche statische Verbindung getConnection () {Connection conn; try {conn = driverManager.getConnection (URL, Benutzername, Passwort); Conn zurückgeben; } catch (sqlexception e) {e.printstacktrace (); } return null; } public static void veröffentlicht (Ergebnisset rs, prepectStatement ps, Verbindung 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 (); }}}} public class blogdao {// Aufzeichnungen für jede Seite, in jeder Seite Startindex und jede Seitengröße für die Pagination, dh zwei Parameter der Limit (MySQL Paging, werden für die Grenze verwendet) publiclist <blog> getPagereCord (int paGenostart, int pagessize) {Connection conn = jdbcutil.getCordConnection (); PrepedStatement ps = null; ResultSet rs = null; String SQL = "Auswählen * aus Blog -Limit?,?"; Liste <blog> list = new ArrayList <blog> (); try {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 ("Inhalt")); blog.setCreated_time (rs.getDate ("erstellt_time")); list.add (Blog); } Rückgabeliste; } catch (sqlexception e) {e.printstacktrace (); } endlich {jdbcutil.release (rs, ps, conn); } return null; } // Gesamtzahl der Datensätze public int getTotal () {Verbindung conn = jdbcutil.getConnection (); PrepedStatement ps = null; ResultSet rs = null; try {ps = conn.preparestatement ("" count (*) aus dem Blog auswählen "); rs = ps.executeQuery (); if (rs.Next ()) {return rs.getint (1); }} catch (sqlexception e) {e.printstacktrace (); } endlich {jdbcutil.release (rs, ps, conn); } return 0; }}Serviceschicht
public class blogservice {blogdao blogdao = new blogDao (); // Seitenbekleidung zurückgeben, alle für die Pagination erforderlichen Informationen gehen in die Seitenbekette, um public blogpage findpagerecord (int pageno) {int TotalRecord = blogdao.gettotal () zu finden; Blogpage blogpage = new Blogpage (Pageno, TotalRecord); List <blog> list = blogdao.getPagereCord (blogpage.getPagenostart (), blogpage.getPageSize ()); blogpage.setpagerecord (Liste); Blogpage zurückgeben; }}Servlet -Klasse
@WebServlet ("/blogSsplitServlet") öffentliche Klasse blogSsplitServlet erweitert httpServlet {public void dodget (httpServletRequest-Anforderung, httpServletResponse-Antwort) löscht ServletException, IOException {Request.Setcharactercoding ("utf-8"); Antwort.SetContentType ("text/html; charSet = utf-8"); String pagenoStr = request.getParameter ("pageno"); // Wenn Sie zum ersten Mal auf Servletpagenostr zugreifen, ist null, dh auf die erste Seite wird standardmäßig int pageno = 1 zugegriffen. if (pagenostr! = null) pageno = Integer.ParseInt (pagenostr); BlogService Service = New BlogService (); Blogpage blogpage = service.findpagerecord (pageno); Request.SetAttribute ("Blogpage", Blogpage); Request.GetRequestDispatcher ("/blogpage.jsp"). Forward (Request, Antwort); } public void dopost (httpServletRequest Request, httpServletResponse -Antwort) löst ServletException aus, ioException {dodget (request, response); }} Auf diese Weise werden alle Paging -Informationen in die Seitenbekette eingekapselt
Die JSP -Implementierung muss nur die Informationen in der Seitenbekleidung abrufen
Meine JSP -Implementierung (simuliertes ligerui) ist unten angegeben
<%@ page Language = "java" contentType = "text/html; charset = utf-8" pageCoding = "utf-8"%> <%@ page import = "java.util. "http://www.w3.org/tr/html4/loose.dtd"><HTML><HEAD><Meta http-equiv =" content-type "content =" text/html; charset = utf-8 "> <titels> fügen Sie hier ein Einfügen zu. Die Option auswählen stimmt mit der aktuellen Seite konsistent aus. pageno = '$ {blogpage.pageno}'; select.options [pageno - 1] .Selected = 'ausgewählt'; } // Dropdown List Jump Function SelectJump () {var pageno = select.selectedIndex + 1; window.location.href = "http: // localhost/jsppagesplit/blogsplitServlet? pageno =" + pageno; } // Textsprung, Onblur -Ereignis, das Eingabefeld verliert Fokus, Funktion textjump () {var pageno = document.getElementById ("text"). Wert; window.location.href = "http: // localhost/jsppagesplit/blogsplitServlet? pageno =" + pageno; } </script> </head> <body> <% Blogpage blogpage = (blogpage) request.getAttribute ("blogpage"); Liste <blog> list = blogpage.getPagereCord (); // Die letzte Seite ist mit leeren Zeilen gefüllt. Wenn nicht gefüllt, steht die Anzahl der Zeilen der letzten Seite Tabelle TR nicht mit dem vorherigen. Es ist hässlich, wenn (list.size () <blogpage.getPageSize ()) {für (int i = list.size (); i <blogpage.getPageSize (); i ++) list.add (null); } %> <div> <table cellpacing = "0" bgcolor = "#cef0c5"> <tr> id </td> <td> Titel </td> <td> Inhalt </td> <td> Erstellungszeit </td> </tr> < %für (blog: list) {if (blog! <td> <%= blog.getId ()%> </td> <td> <%= blog.gettitle ()%> </td> <td> <%= blog.getContent ()%> </td> <td> <%= blog.getCreated_time ()%> </td> </Tr> </tr> <! <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <%}}%> </table> <div style = "height: 50px; Hintergrund-Color: #4b7db3; line-height: 40px;" <%for (int i = 1; i <= blogPage.getTotalpage(); i++) {%> <option onclick="selectjump()"><%=i%></option> <%}%> </select> <a href="${pageContext.request.contextPath}/BlogSplitServlet?pageno=1">Home</a> <a href = "$ {pageContext.request.contextPath}/blogsplitServlet? pageno = <%= blogpage.getPageno ()-1 <1? blogpage.getPageno (): blogpage.getPageno ()-1%> Vorheriger Seite </a> </a> </a> </a> </a> </a> </a </a> </a> </a> </a> </a </a> </a> </a> </a> </a> </a </a> </a> </a </a> </a> </a </a> </a> </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%>">Next Page</a> <a href = "$ {pageContext.request.contextPath}/blogsplitServlet? pageno = <%= blogpage.gettotalpage ()%>"> Letzte Seite </a> <div style = "float: rechts;" $ {blogpage.pageno == blogpage.totalpage? blogpage.totalrecord: blogpage.pagesize}, insgesamt $ {blogpage.totalRecord} Bars angezeigt. Jede Seite wird angezeigt. </div> </div> </div> </body> </html> Dies ist der letzte Blick. Der Stil wird grob angepasst und die Funktion ist genau die gleiche wie die Standardpaginierung von Ligerui.
Ändern Sie den Code in JSP in ein Tag (JSTL, das entsprechende JAR -Paket muss eingeführt werden) und geben Sie den letzten Seitenfüller in das JSP in Servlet ein.
Hinzugefügt zum Servlet
// Die letzte Seite ist mit leeren Zeilen gefüllt. Wenn nicht gefüllt, steht die Anzahl der Zeilen in der letzten Seite Tabelle TR nicht mit dem vorherigen. Liste <blog> list = blogpage.getPagereCord (); if (list.size () <blogpage.getPageSize ()) {für (int i = list.size (); i <blogpage.getPageSize (); i ++) list.add (null); } blogpage.setpagereCord (Liste);JSP -Seite
<%@ page Language = "java" contentType = "text/html; charset = utf-8" pageCoding = "utf-8"%> <%@ page import = "java.util. prefix = "c"%> <! docType html public "-// w3c // dtd html 4.01 transitional // en" "http://www.w3.org/tr/html4/loose.dtd"><html> <-type/JaTitLe> </title> </title> <- Dropdown List Jump Function SelectJump () {var select = document.getElementById ("select"); var pageno = select.selectedIndex + 1; window.location.href = "http: // localhost/jsppagesplit/blogsplitServlet? pageno =" + pageno; } // Textsprung, Onblur -Ereignis, Funktion textjump () {var pageno = document.getElementById ("text"). Wert; 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> Inhalt </td> <td> Erstellungszeit </td> </tr> <c: für itel itsels = "$" $ "$" $ "$" $ "$" $ "$" $ "$" $ "$" {{{Blogpage "{{{{{llog" {{pageSecord | varstatus = "vs"> <c: if test = "$ {c! Leere Zeilenfüllung-> <C: if test = "$ {c == null}"> <tr> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> </td> </tr> </c: if> </c: Foreach> </tdel; #4B7DB3; Zeilenhöhe: 40px; "> <!-Dropdown-Feld auswählen-> <select id =" select "> <c: foreach start =" 1 "end =" $ {blogpage.totalpage} "var =" i "> <option value =" $ {i} "onclick =" selectjump () ""> <option value $ {blogpage.pageno == i? 'selected = "selected"': ''}> $ {i} </option> </c: foreach> </select> <a href = "$ {pageContext.request.contextpathe}/blogspitServly? href = "$ {pageContext.request.contextPath}/blogsplitServlet? pageno = $ {blogpage.pageno-1 <1? bloggen.pageno: bloggen.pageno-1}"> Vorgängerpage </a> <eingabe type type type = "text" text "text" text "text" onblur = "textjump ()">/$ {blogpage.totalpage} <a href = "$ {pageContext.Request.ContextPath}/blogsplitServlet? pageno = $ {bloggen.pageno+1> Blogpage.totalpage? Seite </a> <a href = "$ {pageContext.request.contextPath}/blogsplitServlet? pageno = $ {blogpage.totalpage}"> letzte Seite </a> <div style = "float: rechts; $ {blogpage.pageno == blogpage.totalpage? blogpage.totalrecord: blogpage.pagesize}, insgesamt $ {blogpage.totalRecord} Bars angezeigt. Jede Seite wird angezeigt. </div> </div> </div> </body> </html>In der tatsächlichen Verwendung können Sie JSP -Seiten entsprechend Ihren Anforderungen schreiben, aber der Hintergrundcode ist im Grunde genommen allgemein
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.