Реализация фронта использует Ligerui для внедрения пейджинг. Такое ощущение, что использование фреймворка действительно просто, и это скучно. Он имитирует интерфейс лигера и реализует его (до тех пор, пока он является функцией, он игнорирует стиль)
Здесь мы используем основную трехслойную архитектуру + сервис + JSP для его реализации. Идея очень проста. Напишите всю информацию, связанную с подвижностью, в класс страниц. Сервис возвращает этот класс бобов. Каждый раз, когда поиск заправочного запроса поиск информация встречается из бобов. Тем не менее, детали довольно сложны, такие как граничная обработка (необходимо обработать как границы, так и на задние границы), текущая страница должна отображаться после раскрывающейся коробки и т. Д.
Это стиль странификации, реализованный Ligerui (процесс реализации был написан в моем предыдущем блоге: //www.vevb.com/article/92850.htm)
Процесс реализации моделирования:
Структура каталога
База данных (MySQL)
Модельный уровень, база данных, соответствующая модели (блог) и страница (блог)
Импорт java.sql.date; блог открытого класса {private int id; private int Category_id; Приватная строка название; частный строковый контент; Частная дата create_time; // методы Getter и Setter @Override public String toString () {return "blog [id =" + id + ", category_id =" + category_id + ", content =" + content + ", create_time =" + create_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 рассматривается как существующая информация this.totalRecord = totalRecord; // Рассчитайте общее количество страниц TotalPage = (TotalRecord%PageSize == 0)? TotalRecord/PageSize: TotalRecord/PageSize+1; // пограничная обработка Pageno if (pageno <= 1) this.pageno = 1; иначе if (pageno> = totalPage) this.Pageno = totalPage; иначе это. Пагено = Пагено; // Рассчитайте индекс каждой страницы, то есть индекс первых данных каждой страницы, используемых для страничного запроса pagenostart = (this.pageno-1)*pageSize; } public int getPagenostart () {return pagenostart; } public void setPagenostart (int pagenostart) {this.pagenostart = pagenostart; } public List <wol> getPagereCord () {return pAgereCord; } public void setPagereCord (List <log> 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 otherrecord; } public void cetTotOtalRecord (int totalRecord) {this.TotalRecord = totalRecord; } public int getTotalPage () {return TotalPage; } public void cetTotoTalPage (int totalPage) {this.TotalPage = totalPage; }} Дао слой
Jdbcutil инкапсулирует операции JDBC подключения и выпуска
открытый класс jdbcutil {частная статическая строка url = "jdbc: mysql: // localhost: 3306/blogs_stu"; частная статическая строка username = "root"; Private Static String Password = ""; static {try {class.forname ("com.mysql.jdbc.driver"); } catch (Exception e) {e.printstackTrace (); }} public Static Connection getConnection () {connection conn; try {conn = drivermanager.getConnection (URL, имя пользователя, пароль); вернуть Конн; } catch (sqlexception e) {e.printstacktrace (); } return null; } public static void -выпуск (ResultSet RS, подготовка 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 {// Записи для каждой страницы, проходите в каждой странице индекс начала и размер каждой страницы для страниц, то есть два параметра ограничения (Mysql Paging используется для ограничения) Общедоступный <блог> getPagereCord (int pagenostart, int pageSize) {connect conn = jdbcutil.getConcection ();); Подготовленное предприятие PS = NULL; Результат RS = NULL; String sql = "select * из ограничения блога?,?"; List <loge> list = new Arraylist <wogal> (); try {ps = conn.preprestatement (sql); Ps.setint (1, Pagenostart); Ps.setint (2, PageSize); rs = ps.executequery (); while (rs.next ()) {blog 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 ("create_time")); list.add (блог); } return List; } catch (sqlexception e) {e.printstacktrace (); } наконец {jdbcutil.release (rs, ps, conn); } return null; } // Общее количество записей public int getTotal () {connection conn = jdbcutil.getConnection (); Подготовленное предприятие PS = NULL; Результат RS = NULL; try {ps = conn.preparestatement («Выберите count (*) из блога»); rs = ps.executequery (); if (rs.next ()) {return rs.getint (1); }} catch (sqlexception e) {e.printstacktrace (); } наконец {jdbcutil.release (rs, ps, conn); } return 0; }}Сервисный слой
Общедоступный класс Blogservice {blogdao blogdao = new Blogdao (); // return Pagebean, вся информация, необходимая для страниц, перейна на страницу, чтобы найти публичную блог -страницу FindPagereCord (int pageno) {int totalRecord = blogdao.getTotal (); BlogPage BlogPage = новая блог -страница (Pageno, TotalRecord); List <loge> list = blogdao.getPageRecord (blogpage.getPagenostart (), blogpage.getPagesize ()); blogpage.setpagerecord (список); вернуть блог -страницу; }}Сервлет класс
@Webservlet ("/blogsplitservlet") public class blogsplitservlet расширяет httpservlet {public void doget (httpservletrequest, httpservletresponse response) throws servletexception, ioexception {request.setcharacterencoding ("utf-8"); response.setContentType ("text/html; charset = utf-8"); String pagenoStr = request.getParameter ("pageno"); // В первый раз, когда вы получаете доступ к сервистуру, нулевой, дайте начальное значение, то есть первая страница доступна по умолчанию 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"). } public void Dopost (httpservletRequest, httpservletresponse response) Throws ServletException, ioException {Doget (запрос, ответ); }} Таким образом, вся информация о пейджинге будет включена в страницу
Реализация JSP должна только для получения информации на странице
Моя реализация JSP (смоделированная лигеруи) приведена ниже
<%@ page language = "java" contentType = "text/html; charset = utf-8" pageencoding = "utf-8"%> <%@ page import = "java.util.*, model.blog, model.blogpage"%> <! Doctpe html public "// w3c // dtd html html //01 n. «http://www.w3.org/tr/html4/loose.dtd"><html><head><meta http-equiv =" content-type "content =" text/html; charset = utf-8 "> insert withled </title> <script type =" javascript funtradio? что параметр «Выбрать» согласуется с текущей страницей SELECT = DOCUMTIONG.GETELEMEMED ("SELECT"); pageno = '$ {blogpage.pageno}'; select.options [pageno - 1]. Selected = 'selected'; } // Выберите «Функция раскрывающегося списка» selectJump () {var pageno = select.selectedIndex + 1; window.location.href = "http: // localhost/jsppagesplit/blogsplitservlet? pageno =" + pageno; } // Text jump, onblur Event, окно ввода теряет фокус, функция TextJump () {var pageno = document.getElementById ("text"). Value; window.location.href = "http: // localhost/jsppagesplit/blogsplitservlet? pageno =" + pageno; } </script> </head> <body> <% blogpage blogpage = (blogpage) request.getattribute ("blogpage"); List <loge> list = blogpage.getPageRecord (); // Последняя страница заполнена пустыми рядами. Если не заполнить, количество рядов таблицы последней страницы TR не соответствует предыдущему. Это уродливо, если (list.size () <) <blogpage.getPagesize ()) {для (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> Content </td> <td> Время создания </td> </tr> < %(Blog Blog: List) {if (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 = "Выбор 50PX; фонарец: #4b7db3; line-height: 40px; <%for (int i = 1; i <= blogpage.getTotalPage (); i ++) {%> <опция onclick = "selectJump ()"> <%= i%> </option> <%}%> </select> <a href = "$ {pagecontext.request.contextpath}/blogsplitserverververververververververververververververververververververververververververververververververververv (abecontext.request.contextpath}/blog href = "$ {pagecontext.request.contextpath}/blogsplitservlet? pageno = <%= blogpage.getpageno ()-1 <1? Blogpage.getPageno (): blogpage.getPageno ()-1%>"> Предыдущая страница </a> <input = "text.depageno ()-1%>"> Предыдущая страница </a> <input = "yed" yextpageno ()-1%> ". value = "$ {blogpage.pageno}" onblur = "textjump ()">/$ {blogpage.totalpage} <a href = "$ {pagecontext.request.contextpath}/blogsplitservlet? pageno = <%= blogpage.getpageno ()+1> blogpage.getTotalPage ()? Blogpage.getPageno (): blogpage.getPageNo ()+1%>"> следующая страница </a> <а href = "$ {pagecontext.request.contextpath}/blogsplitservlet? pageno = <%= blogpage.gettotalpage ()%>"> Последняя страница </a> <div style = "float: right; $ {blogpage.pageno == blogpage.totalpage? blogpage.totalRecord: blogpage.pagesize}, в общей сложности $ {blogpage.totalRecord} отображаются бары. Каждая страница отображается. </div> </div> </div> </body> </html> Это последний взгляд. Стиль примерно корректируется, и функция точно такая же, как у лигеруи по умолчанию.
Измените код в JSP на тег (JSTL, необходимо ввести соответствующий пакет JAR) и поместите последнюю страницу наполнителя в JSP в сервлете.
Добавлен в сервлет
// Последняя страница заполнена пустыми рядами. Если не заполнить, количество строк в таблице последней страницы TR не соответствует предыдущему. List <loge> list = blogpage.getPageRecord (); if (list.size () <blogpage.getPagesize ()) {for (int i = list.size (); i <blogpage.getPagesize (); i ++) list.add (null); } blogpage.setPagereCord (List);JSP Page
<%@ 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/@clib uri =" http://java.sun.com/jst/cpr prefix = "c"%> <! Doctype html public "-// w3c // dtd html 4.01 Transitional // en" "http://www.w3.org/tr/html4/loose.dtd"> html>? // Выберите «Выберите" Функция прыжка "selectJump () {var select = document.getElementById (" select "); var pageno = select.selectedIndex + 1; window.location.href = "http: // localhost/jsppagesplit/blogsplitservlet? pageno =" + pageno; } // текстовый прыжок, событие onblur, функция textjump () {var pageno = document.getElementById ("text"). Value; 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> content </td> <td> Time </td> </tr> <C: for Peach vites = "$" {td>. 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> </td> <td> $ {C.created_time} </td> </td> <td> $ {C.created_time} </td> </td> <td> $ {c.created_time} </td> <td> $ {c.created_time} Заполнение пустой строки страницы-> <c: if test = "$ {c == null}"> <tr> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> </tr> </c: if> </c: for> style = "Высота: 50px; фоновый цвет: #4b7db3; line-hight: 40px;"> <!-Выберите раскрывающуюся поле-> <select id = "select"> <c: foreach begin = "1" end = "$ {blogpage.totalpage}" var = "i"> <vitue value = "$ {i}" Onclick onclick = ")" () "()" () "()" () "()" () " $ {blogpage.pageno == I? href = "$ {pagecontext.request.contextpath}/blogsplitservlet? Pageno = $ {blogpage.pageno-1 <1? Blogpage.pageno: blogpage.pageno-1}"> Предыдущая страница </a> <input = "text" id = "size =" 1px "value =" $ kvaly = "$ kvaly =" $ kvaly = "$ kvaly. onblur = "textJump ()">/$ {blogpage.totalpage} <a href = "$ {pagecontext.request.contextpath}/blogsplitservlet? Pageno = $ {blogpage.pageno+1> blogpage.totalpage ?pagegegen Страница </a> <a href = "$ {pagecontext.request.contextpath}/blogsplitservlet? pageno = $ {blogpage.totalpage}"> Последняя страница </a> <div style = "float: right;"> Показывает $ {blogpage.pagenostart+1} to to to to to to to to to to to $ {blogpage.pageno == blogpage.totalpage? blogpage.totalRecord: blogpage.pagesize}, в общей сложности $ {blogpage.totalRecord} отображаются бары. Каждая страница отображается. </div> </div> </div> </body> </html>В реальном использовании вы можете написать страницы JSP в соответствии с вашими потребностями, но фоновый код в основном общий
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.