在以列表的形式顯示資料時需要對頁面進行翻頁控制,基本在項目的各模組中都會用到。為了最大限度地實現翻頁的可重用和易移植,利用組件的形式對翻頁邏輯進行封裝。
翻頁控制器的分析
描述:
翻頁控制器用來實現對WEB頁面的翻頁內容的顯示和翻頁的各種操作的控制。通過JSP調用,將分頁內容顯示到WEB頁面。它支援多種方式和風格的顯示。
翻頁控制器的設計
下面分別建立翻頁控制器的一個PageConfig類、一個Page類、一個PageView類。
· PageConfig.java
類
類 |
PageConfig |
聲明 |
public class |
描述 |
這個類用來儲存頁面屬性的值,如每頁顯示幾行等。 |
超類 |
|
執行 |
|
屬性描述
屬性 |
屬性描述 |
定義 |
[PageConfig] |
|
|
|--PAGE_SIZE |
頁大小 |
public static final int |
|--PAGE_SIZE_SMALL |
小型頁面的大小 |
public static final int |
|--PAGE_SIZE_NORMAL |
正常頁面的大小 |
public static final int |
|--PAGE_SIZE_BIG |
大型頁面的大小 |
public static final int |
|--PAGE_SIZE_BIGGER |
較大頁面的大小 |
public static final int |
|--PAGE_SIZE_BIGGEST |
最大頁面的大小 |
public static final int |
· Page.java
類
類 |
Page |
聲明 |
public class |
描述 |
這個類用來儲存頁面屬性的值,如每頁顯示幾行等。 |
超類 |
|
執行 |
java.lang.Serializable |
屬性描述
屬性 |
名稱 |
屬性描述 |
資料類型 |
|--EMPTY_PAGE |
空白頁面 |
描述一個空白頁面,即不含內容的頁面。 |
Page對象 |
|--objects |
結果集列表 |
結果集列表 |
java.util.List或java.util.Vector |
|--start |
開始記錄號 |
開始記錄號,從0開始 |
正整數和0 |
|--end |
結束記錄號 |
結束記錄號 |
正整數和0 |
|--viewStart |
顯示在頁面開始記錄號 |
顯示在頁面開始記錄號,從1開始 |
正整數 |
|--viewEnd |
顯示在頁面結束記錄號 |
顯示在頁面結束記錄號 |
正整數 |
|--hasPrevious |
是否有上一頁的開關 |
是否有上一頁的開關 |
布爾值 |
|--previousPageNumber |
上一頁的頁碼 |
上一頁的頁碼 |
正整數和0 |
|--hasNext |
是否有下一頁的開關 |
是否有下一頁的開關 |
布爾值 |
|--nextPageNumber |
下一頁的頁碼 |
下一頁的頁碼 |
正整數和0 |
|--total |
總行數 |
一共有多少行記錄 |
正整數和0 |
|--totalPage |
總頁數 |
一共有多少頁 |
|
|--currentPageNumber |
當前頁 |
描述當前是第幾頁 |
正整數和0 |
|--pageSize |
頁大小 |
描述每頁有多少行 |
正整數和0 |
構造器
構造器 |
構造器描述 |
參數 |
[Page] |
|
|
|--Page(List l, int s, boolean hasNext) |
建立頁面 |
l 結果集s 開始記錄號,從0開始hasNext 是否有下一頁的開關 |
|--Page(List l, int s, boolean hasNext, int total) |
建立頁面 |
l 結果集s 開始記錄號,從0開始hasNext 是否有下一頁的開關total 一共有多少行記錄 |
|--Page(List l, int s, int size, boolean hasNext, int total) |
建立頁面 |
l 結果集s 開始記錄號,從0開始size 每頁有多少行hasNext 是否有下一頁的開關total 一共有多少行記錄 |
|-- Page(List l, int num, int size, int total) |
建立頁面 |
l 結果集num 當前是第幾頁size 每頁有多少行total 一共有多少行記錄 |
|-- Page(List l) |
建立頁面,不進行分頁 |
l 結果集 |
方法
方法 |
方法描述 |
傳回值 |
[Page] |
|
|
|--autoCalculate () |
自動計算,根據當前頁、頁大小、總行數計算出其它屬性的值 |
private void |
|--getList() |
獲得結果集 |
public List |
|--getViewStart() |
獲得顯示在頁面的開始記錄號,從1開始 |
public int |
|--getViewEnd() |
獲得顯示在頁面的結束記錄號 |
public int |
|--hasNextPage() |
是否有下一頁 |
public boolean |
|--hasPreviousPage () |
是否有上一頁 |
public boolean |
|--getPreviousPageNumber () |
獲得上一頁的頁碼 |
public int |
|--getNextPageNumber () |
獲得下一頁的頁碼 |
public int |
|--getTotal () |
獲得結果集中記錄總行數 |
public int |
|--getTotalPage () |
獲得總頁數 |
public int |
|--getCurrentPageNumber () |
獲得當前頁碼 |
public int |
|--getPageSize () |
獲得每頁多少行記錄 |
public int |
|--getStartOfNextPage () |
獲得下一頁在結果集中開始的記錄號,從0開始 |
public int |
|--getStartOfPreviousPage () |
獲得上一頁在結果集中開始的記錄號,從0開始 |
public int |
|--getSize() |
獲得當前頁包括的記錄行數 |
public int |
|--isEmpty() |
判斷當前頁面是否是空白頁面,如果當前頁面是空白頁面,返回true,否則,返回false |
public boolean |
PageView.java
類
類 |
PageView |
聲明 |
public class |
描述 |
通過JSP調用,將分頁內容顯示到WEB頁面。不支援圖片、按鈕等,只支援文字。用法:在JSP頁面按如下形式定義: <% PageView view = new PageView(request,out,page); %>按預設形式顯示<% view.setVisible(true); %>按指定形式顯示<% view.setVisible(true,0,1); %> |
超類 |
|
執行 |
|
屬性描述
屬性 |
名稱 |
屬性描述 |
資料類型 |
[PageView] |
|
|
|
|--currentUrl |
當前頁面的URL |
當前頁面的URL |
字串 |
|--style |
風格 |
風格 |
字串 |
|--useSquareBrackets |
是否加[]的開關 |
在"上一頁"兩邊是否加上"["和"]" |
布爾值 |
|--page |
WEB頁面 |
WEB頁面 |
Page對象 |
構造器
構造器 |
構造器描述 |
參數 |
[PageView] |
|
|
|-- PageView (HttpServletRequest request,JspWriter out,Page page)) |
建立一個分頁內容 |
request 用戶端請求out 頁面輸出對象page WEB頁面 |
方法
方法 |
方法描述 |
傳回值 |
[PageView] |
|
|
|--setVisible(boolean visible) |
按預設形式顯示分頁內容,如果visible為true,則顯示分頁內容,否則,不顯示分頁內容 |
public void |
|--setVisible(boolean visible,int style,int order) |
按指定形式顯示分頁內容,如果visible為true,則顯示分頁內容,否則,不顯示分頁內容 |
public void |
|--setVisible(boolean visible,boolean useSquareBrackets,int style,int order) |
按指定形式顯示分頁內容,如果visible為true,則顯示分頁內容,否則,不顯示分頁內容 |
public void |
|--viewPage(boolean useSquareBrackets,int style,int order) |
按指定形式顯示分頁內容,order為0,表示完整形式,按如下順序顯示:共計:18 分頁:2 當前頁:1 每頁:10 首頁 前頁 後頁 尾頁 轉到□□□□order為1,表示簡潔形式,按如下順序顯示:前頁 後頁 尾頁 1/2order為2,表示完整形式2,按如下順序顯示:共計:18 每頁:10 轉到□□□□ 首頁 前頁 後頁 尾頁 1/2 |
public void |
翻頁控制器的編碼
只需按翻頁控制器的設計進行編碼,這裡不用再講了。
翻頁控制器組件的原始碼
a)PageConfig.java
b)Page.java
c)PageView.java
原始碼:立即下載
翻頁控制器的調用
翻頁控制器的調用實在太簡單了,調用方法:
· 匯入翻頁控制器包
<%@ page import="java.util.List,com.cwap.oa.controller.web.page.Page,com.cwap.oa.controller.web.page.PageView"%> |
· 建立一個Page對象,Page.EMPTY_PAGE為空白頁面
Page page = Page.EMPTY_PAGE; |
· 建立一個PageView對象
<% PageView view = new PageView(request,out,page); %> |
· 顯示分頁的內容:
按預設形式顯示
<% view.setVisible(true); %> |
按指定形式顯示
<% view.setVisible(true,0,1); %> |
· 調用翻頁控制器的例子
下面是在論壇板塊中的一個JSP中調用的樣本,用來顯示所有的論壇板塊列表,下面只列出部分代碼:
<%@ page language="java"%><%@ page contentType="text/html; charset=GBK"%><%@ page import="java.util.List, com.cwap.oa.controller.web.page.PageView,com.cwap.oa.controller.web.page.Page"%><jsp:useBean id="forumBoardHelper" scope="page" class="com.club8090.forum.forumboard.client.ForumBoardClientHelper"/><%String tmp=request.getParameter("pageNumber");int pageNumber = 0;if(tmp==null || tmp.equals("")){pageNumber = 1;}else{try { pageNumber = Integer.parseInt(tmp);}catch(java.lang.NullPointerException npe){ pageNumber = 1;}catch(java.lang.NumberFormatException nfe){ pageNumber = 1;}}Page page = Page.EMPTY_PAGE;//page初始化為Page.EMPTY_PAGE空白頁面page = forumBoardHelper.getAllForumBoards(pageNumber);%>…<table><tr><td>NO.</td><td>名稱</td><td>描述摘要</td></tr><%List items = page.getList();if( items.isEmpty() ) {out.println("<tr colspan=3>沒有記錄存在</tr>");}else{ int no;//頁面中顯示的行數 for (int i = 0; i < items.size(); i++) { ForumBoardModel forumBoardModel = (ForumBoardModel)items.get(i); no = page.getViewStart() + i;%>//顯示記錄列表<tr><td><%= no %></td><td><%= forumBoardModel.getName() %></td><td><%= forumBoardModel.getSummary() %></td></tr><% } PageView view = new PageView(request,out,page); view.setVisible(true,0,1);}%></table>… |