在以列表的形式显示数据时需要对页面进行翻页控制,基本在项目的各模块中都会用到。为了最大限度地实现翻页的可重用和易移植,利用组件的形式对翻页逻辑进行封装。
翻页控制器的分析描述:
翻页控制器用来实现对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>
…
|