注:私はさまざまなページングをオンラインで見てきましたが、その多くは一般的であると主張していますが、多くの場合、それらは満足のいくものではありません。一部の人はページングクラスにURLアドレス情報を追加し、ページングクラスでページングアクションを実行する人もいます(このアクションは完全にデータベースを操作する問題です)。さて、私の要約と洗練の後:
自分で手動でページングするか、フレームワークの助けを借りているかどうか。このツールクラスは、安定したページング効果(ナビゲーションページ番号の機能を含む)を実現するのに役立ちます。使用方法は比較的簡単です。
パッケージtest.dao; java.util.listをインポートします。 / ***ページネーションのツールクラス* @authorネット名を取得しないでください*/ public class pager <t> {private list <t> list; //オブジェクトレコード結果セットプライベートint total = 0; // Total Records Private int limit = 20; //ページごとに表示されるレコードの数プライベートINTページ= 1; //合計ページプライベートINT PAGENUMBER = 1; //現在のページprivate boolean isfirstpage = false; //それが最初のページであるかどうかのプライベートブールのIslastPage = false; //それが最後のページであるかどうかprivate boolean haspreviouspage = false; //前のページはありますか?プライベートブールhasnextpage = false; //次のページがありますかprivate int NavigationPages = 8; //ナビゲーションページ番号の数private int [] NavigationPageNumbers; //すべてのナビゲーションページ番号Public Pager(int total、int pagenumber、limit); } public Pager(int total、int pagenumber、int lime){init(total、pageNumber、limit); } private void init(int total、int pagenumber、int limit){init(合計、pageNumber、limit); } private void init(int total、int pagenumber、int lime){//基本的なパラメーターthis.total = totalを設定します。 this.limit = limit; this.pages =(this.total-1)/this.limit +1; //元々は、(pagenumber <1){this.pageNumber = 1; } else if(pagenumber> this.pages){this.pageNumber = this.pages; } else {this.pageNumber = pagenumber; } //基本的なパラメーター設定の後、ナビゲーションページCalcnavigatePagenumbers()を計算します。 //ページboundary JudgeBoudary()の決定。 } /***ナビゲーションページを計算します* /private void calcnavigatePagenumbers(){//ページの総数がナビゲーションページの数が少ない場合(ページ<= navigatePages){vangatePagenumbers = new int [ページ]; for(int i = 0; i <pages; i ++){navigatePageNumbers [i] = i+1; }} else {//ページの総数がナビゲーションページの数よりも大きい場合、navigatepagenumbers = new int [navigatepages]; int startnum = pagenumber-navigatepages/2; int endnum = pagenumber+navigatepages/2; if(startnum <1){startnum = 1; //((int i = 0; i <navigatepages; i ++){navigatepagenumbers [i] = startnum ++;}} else if(endnum> pages){endnum = pages; //最後のnavigatepagesページ(int i = navigatepages-1; i> = 0; i> 0; i-) NavigatePageNumbers [i] = endnum--; 1 ISLASTPAGE == PAGENUMBER!= 1; /*** @return {int}* /public gettotal(){return total; number* @return {int}/ public getPageNumber(){return pageNumber* @return {int []/ public int [] ISLASTPAGE(){public haspreviouspage(){public hasnextpage(){return hasnextpage} .Append( "、pages =")。append(pages).append( "、pageNumber =")。付録(pageNumber).append( "、limit =")。append( "、isfirstpage =")。 .append( "、haspreviouspage =")。(haspreviouspage) i = 1; i <len; i ++){"+navigatepagenumbers [i]);使用について:手順は次のとおりです。
1)。条件付きクエリが使用されるかどうかに関係なく、最初に対応するエントリの総数をカウントします。
2)。ポケット器クラスを作成します(制限パラメーターは、自分の前景に従って作成できます)
3)。構築されたページャークラスに従って自動的に修正されたPageNumberパラメーターを取得し、-1を掛け、制限を照会する最初のレコードの位置として機能します。
4)。開始位置から制限までチェックするすべてのレコードを設定します。 (手動でページングしている場合、2番目のパラメーターがデータベースに応じて、エンドレコードの位置オフセットである可能性もあります)
5)。 [条件]でクエリのリストをページャーオブジェクトに設定して返します。
6)。プレゼンテーションレイヤーでは、サーブレットまたはアクションを使用してこのページオブジェクトを使用したり、ポケットベルオブジェクトを直接取得したりできます。 URLをスプライシングする特定の問題も、プレゼンテーションレイヤーに任せて完了する必要があります。
int totalcount = integer.valueof(querycount.uniqueresult()。toString()); Pager Pager = new Pager(TotalCount、Pagenumber、Limit); queryList.setFirstResult((pager.getPageNumber() - 1)*lime); //フォールトトレラント処理QueryList.setMaxResults(Limit); pager.setlist(querylist.list());返却ページ。
上記のコードは、Hibernateを使用した簡単な例です。手動ページを使用している場合は、使用する手順に従ってください。
もちろん、ページネーションは、DAO層またはサービス層で完了できます。サーブレットまたはアクションは、サービスレイヤーコードを呼び出します。個人的には、ページングは実際にはビジネスニーズであるため、ビジネスレベルに配置できます。 DAOレイヤーは、対応する[条件クエリ]リストと[条件]統計カウントを提供するため、ビジネスレイヤーは独自のニーズに応じてメソッド呼び出しを行うことができます(確立されたステップの後にのみ必要です。もちろん、ビジネスはプロセスステップを確立しています)。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。