フロントエンドの実装では、Ligeruiを使用してページングを実装します。フレームワークを使用することは本当に簡単で、退屈だと感じています。ライガーのページングインターフェイスをシミュレートし、それを実装します(それが機能である限り、スタイルを無視します)
ここでは、基本的な3層アーキテクチャ +サーブレット + JSPを使用して実装します。アイデアはとてもシンプルです。すべてのページング関連情報をPageBeanクラスに書き込みます。このサービスは、このBeanクラスを返します。ページングクエリが検索されるたびに、情報はBeanから見つかります。ただし、境界処理などの詳細は非常に複雑です(フロントエンドとバックエンドの両方の境界を処理する必要があります)、ドロップダウンボックスジャンプなどの後に現在のページを表示する必要があります。
これはLigeruiによって実装されたページネーションスタイルです(実装プロセスは私の以前のブログ(//www.vevb.com/article/92850.htm)に記述されました)
シミュレーション実装プロセス:
ディレクトリ構造
データベース(mysql)
モデルレイヤー、モデル(ブログ)に対応するデータベース、およびPageBean(ブログ)
java.sql.date; public class blog {private int id; private int category_id;プライベートストリングタイトル。プライベート文字列コンテンツ。プライベートデートcreated_time; // getter and setter method @override public string toString(){return "blog [id =" + id + "、category_id =" + category_id + "、content =" + content + "、created_time =" + created_time + "]"; }}パブリッククラスのブログ{プライベートリスト<blog> pagerecord; //各ページの録音プライベートインターページェノ; //現在のページプライベートインターページネスタアート; //各ページはインデックスプライベートint pagesize = 5; this.TotalRecord = TotalRecord; //ページの合計数を計算するTotalPage =(TotalRecord%Pagesize == 0)?TotalRecord/Pagesize:TotalRecord/Pagesize+1; // pagenoの境界処理if(pageno <= 1)this.pageno = 1; else if(pageno> = totalpage)this.pageno = totalpage; else.pageno = pageno; //各ページのインデックス、つまり、Pagenostart =(this.Pageno-1)*Pagesizeに使用されるページネーションクエリに使用される各ページの最初のデータのインデックスを計算します。 } public int getPagenostart(){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(){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; }}ダオ層
JDBCutilは、JDBCの接続とリリース操作をカプセル化します
パブリッククラスjdbcutil {private static string url = "jdbc:mysql:// localhost:3306/blogs_stu"; private static string 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、username、password); conn; } catch(sqlexception e){e.printstacktrace(); } nullを返します。 } public static void release(resultset rs、preated -statement 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 {//各ページの記録、各ページの開始インデックスと各ページサイズのページネーション、つまり、制限の2つのパラメーター(制限に使用されます)パブリックリスト<Blog> getPageRecord(int pagenostart、int pagesize){connection conn = jdbcutil.getConnection(); represedStatement PS = null;結果rs = null; string sql = "select * from blog lime?、?"; List <Blog> list = new ArrayList <Blog>(); try {ps = conn.preparestatement(sql); ps.setint(1、pagenostart); ps.setint(2、pageize); 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( "created_time")); list.add(blog); }返品リスト。 } catch(sqlexception e){e.printstacktrace(); }最後に{jdbcutil.release(rs、ps、conn); } nullを返します。 } //レコードの総数public int gettotal(){connection conn = jdbcutil.getConnection(); represedStatement PS = null;結果rs = null; try {ps = conn.preparestatement( "blog" from blog "); rs = ps.executequery(); if(rs.next()){return rs.getint(1); }} catch(sqlexception e){e.printstacktrace(); }最後に{jdbcutil.release(rs、ps、conn); } return 0; }}サービスレイヤー
Public Class BlogService {Blogdao Blogdao = new Blogdao(); // PageBeanを返し、ページネーションに必要なすべての情報はPageBeanに移動して、Public Blogpage FindPageRecord(int pageno){int totalRecord = blogdao.getTotal(); Blogpage Blogpage = new Blogpage(Pageno、TotalRecord);リスト<Blog> list = blogdao.getPageRecord(blogpage.getPagenostart()、blogpage.getPagesize()); blogpage.setPageRecord(list);ブログを返します。 }}サーブレットクラス
@webservlet( "/blogsplitservlet")パブリッククラスブログextends httpservlet {public void doget(httpservletrequest request、httpservletresponse応答)servletexception、ioexception {request.setcharacterencoding( "utf-8"); Response.setContentType( "text/html; charset = utf-8"); string pagenostr = request.getParameter( "pageno"); // ServletPagenoStrに初めてアクセスしたときはNULLで、初期値を指定します。つまり、最初のページにデフォルトでアクセスされます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 request、httpservletResponse応答)servletexception、ioexception {doget(request、response); }}このようにして、すべてのページング情報がページビーンにカプセル化されます
JSPの実装では、PageBeanの情報を取得するだけです
私のJSP実装(シミュレートされたligerui)を以下に示します
<%@ページ言語= "java" contentType = "text/html; charset = utf-8" pageencoding = "utf-8"%> <%@ページインポート= "java.util。*、model.blog、model.blogpage"%> <!doctype html public " - // w3c/dtd html 4.01 "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv =" content-type "content =" text/html; charset = utf-8 "> <title> charset = utf-8"> <タイトルオプションは現在のページselect = document.getElementById( "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; } //テキストジャンプ、onblurイベント、入力ボックスはフォーカスを失い、function 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");リスト<Blog> list = blogpage.getPageRecord(); //最後のページは空白の行で満たされています。満たされていない場合、最後のページテーブルTRの行の数は、前の行と矛盾しています。 (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>タイトル</td> <td> Content </td> <td> <td>作成時間</td> </tr> <%for(ブログブログ:リスト) <td> <%= blog.getId()%> </td> <td> <%= blog.getTitle()%> </td> <td> <%= blog.getContent()%> </td> <%= blog.getcreated_time()%> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <%}}%}}%}} div style = "height:50px; background-color:#4b7db3; line-height:40px; id = "select"> <%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%>">前のページvalue = "$ {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()gettotalpage()gettotalpage()gettotalpage>"> last page </a> <div style = "float:right;"> shows $ {blogpage.pagenostart+1} $ {blogpage.pageno == blogpage.totalpage?blogpage.totalRecord:blogpage.pagesize}、$ {blogpage.totalRecord}バーが表示されます。各ページが表示されます。 </div> </div> </div> </body> </html>これが最後の外観です。スタイルはほぼ調整されており、機能はLigeruiのデフォルトのページネーションとまったく同じです。
JSPのコードをタグ(JSTL、対応するJARパッケージを導入する必要がある)に変更し、最後のページフィラーをサーブレットのJSPに入れます。
サーブレットに追加されました
//最後のページは空白の行で満たされています。満たされていない場合、最後のページテーブルTRの行の数は、前の行と矛盾しています。リスト<Blog> list = blogpage.getPageRecord(); if(list.size()<blogpage.getPagesize()){for(int i = list.size(); i <blogpage.getPagesize(); i ++)list.add(null); } blogpage.setPageRecord(list);JSPページ
<%@ページ言語= "java" contentType = "text/html; charset = utf-8" pageencoding = "utf-8"%> <%@ page import = "java.util。*、model.blog、model.blogpage"%> <%@@ aglib uri = "http://java.sun.com.sun.com/jsp/core"プレフィックス= "C"%> <!Doctype HTML public " - // w3c // dtd HTML 4.01 Transitional // En" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head>リストジャンプ関数selectjump(){var select = document.getElementById( "select"); var pageno = select.selectedindex + 1; window.location.href = "http:// localhost/jsppagesplit/blogsplitservlet?pageno =" + pageno; } //テキストジャンプ、onblurイベント、function 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>タイトル</td> <td>コンテンツ</td> <td>作成時間</td> </td> </tr> < varstatus = "vs"> <c:if test = "$ {c!= null}"> <tr> <td> $ {c.id} </td> <td> $ {c.title} </td> <td> <td> $ {c.content} </td> <td> $ {c.created_time} </td>ページブランクラインフィリング - > <c:test = "$ {c == null}"> <tr> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td> </c:if> </c:> </</tail style = "height:50px; background-color:#4b7db3; line-height:40px;"> <! - select drop-down box-> <select id = "select"> <c:foreach begin = "1" end = "$ {blogpage.totalpage}" var = "i"> <option値= "$ {i}" onclick = "" $ {blogpage.pageno == i? 'selected = "selected"': ''}> $ {i} </option> </c:foreach> </select> <a href = "$ {pagecontext.request.contextpath}/bloggsplitservlet? href = "$ {pagecontext.request.contextpath}/blogsplitservlet?pageno = $ {blogpage.pageno-1 <1?blogpage.pageno.pageno.pageno-1}">前のページ</a> <入力タイプ "テキスト" id "" zize = "" valut "" $ "" "$" onblur = "textjump()">/$ {blogpage.totalpage} <a href = "$ {pagecontext.request.contextpath}/blogsplitservlet?pageno = $ {blogpage.pageno+1> blogpage.totalpage? Page </a> <a href = "$ {pagecontext.request.contextpath}/blogsplitservlet?pageno = $ {blogpage.totalpage}"> last page </a> <div style = "float:right;">は$ {blogpage.pagenostart+1}を表示します。 $ {blogpage.pageno == blogpage.totalpage?blogpage.totalRecord:blogpage.pagesize}、$ {blogpage.totalRecord}バーが表示されます。各ページが表示されます。 </div> </div> </div> </body> </html>実際に使用すると、ニーズに応じてJSPページを書くことができますが、バックグラウンドコードは基本的に一般的です
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。