public class Page {
/**
* 当前是第几页
*/
private int curPage; //当前是第几页
/**
* 一共有多少页
*/
private int maxPage; //一共有多少页
/**
* 一共有多少条记录(行)
*/
private int maxRowCount; //一共有多少行
/**
* 每页显示多少行
*/
private int rowsPerPage; //每页显示多少行
/**
* 当前页面要显示的数据列表(包含数据库返回对象的列表)
*/
private List list; //当前页面显示的数据
/**
* 提交的表单的名称
*/
private String formName = "pageForm";//提交的表单名称
/**
* 显示分页的前台页面路径名称
*/
private String target = "";
/**
* 默认每页显示记录数
*/
private static int ROWS_PER_PAGE = 15;
/**
* 分页信息初始化,每页显示记录数使用默认值
*
*/
public Page() {
this.curPage = 1;
this.maxPage = 1;
this.maxRowCount = 0;
this.rowsPerPage = ROWS_PER_PAGE;
}
/**
* <p>
* 设置当前分页页面要显示的数据对象列表
* </p>
*
* <p>
* 该对象可以是一个实现了 List 接口的任意列表
* </p>
*
* @param list -
* 实现了 List 接口的任意列表
*/
public void setList(List list) {
this.list = list;
}
/**
* 获取要在当前分页页面显示的数据对象列表
*
* @return 要显示在前台页面的数据对象列表
*/
public List getList() {
return this.list;
}
/**
* 设置记录的总行数(即所有满足条件的纪录总数)
*
* @param maxRowCount -
* 记录的总行数
*/
public void setMaxRowCount(int maxRowCount) {
this.maxRowCount = maxRowCount;
}
/**
* 获取记录的最大行数
*
* @return - 满足条件的所有记录条数
*/
public int getMaxRowCount() {
return this.maxRowCount;
}
/**
* 设置当前页数(即要显示在前台的当前页数)
*
* @param curPage -
* 当前页数
*/
public void setCurPage(int curPage) {
this.curPage = curPage;
}
/**
* 返回在前台显示的当前页数
*
* @return - 当前页数
*/
public int getCurPage() {
return this.curPage;
}
/**
* <p>
* 设置每页显示的记录条数
* </p>
* <p>
* 注意:如果每页显示的记录条数小于等于 0 ,则每页显示的记录条数将置为默认值
* </p>
*
* @param rows -
* 每页显示的记录条数
*/
public void setRowsPerPage(int rows) {
if (rows > 0) {
this.rowsPerPage = rows;
} else {
this.rowsPerPage = ROWS_PER_PAGE;
}
}
/**
* 设置页面提交表单的名称,默认为 pageForm,在一般情况下,使用默认值就能正常使用
*
* @param formName -
* 提交表单的名称
*/
public void setFormName(String formName) {
this.formName = formName;
}
/**
* 设置显示分页的前台页面路径名称
*
* @param target -
* 分页页面路径名称
*/
public void setTarget(String target) {
this.target = target;
}
/**
* 获取每页显示的记录条数
*
* @return - 每页显示的记录条数
*/
public int getRowsPerPage() {
return this.rowsPerPage;
}
/**
* 根据记录总数和每页显示的记录条数,计算总共有多少页
*
*/
public void setMaxPage() {
if (this.maxRowCount % this.rowsPerPage == 0) {
this.maxPage = this.maxRowCount / this.rowsPerPage;
} else {
this.maxPage = this.maxRowCount / this.rowsPerPage + 1;
}
}
/**
* 获取根据记录总数和每页显示的记录数计算得出的总页数
*
* @return - 记录总页数
*/
public int getMaxPage() {
return this.maxPage;
}
/**
* 获取前台分页页面提交表单的名称
*
* @return - 提交表单的名称
*/
public String getFormName() {
return this.formName;
}
/**
* 获取前台分页页面的路径名称
*
* @return - 前台分页页面的路径名称
*/
public String getTarget() {
return this.target;
}
/**
* 获取默认每页显示的记录条数
*
* @return - 默认每页显示的记录条数
*/
public int getDefaultRowsPerPage() {
return ROWS_PER_PAGE;
}
/**
* 根据前台分页页面名称和相关分页信息,获取前台页面提交表单和页面信息的 HTML 代码
*
* @param aUrl -
* 前台分页页面的路径名称
* @return - 前台页面提交表单和页面信息的 HTML 代码
*/
public String getPageStr(String aUrl) {
String strFirstPage = "首页";
String strLastPage = "末页";
String strNextPage = "下一页";
String strPrevPage = "上一页";
String strCurrentPage = "页次";
String strGoto = "转至:";
StringBuffer strPages = new StringBuffer();
//跳转脚本
strPages.append("<script language='JavaScript'>/r/n");
strPages.append("<!--/r/n");
strPages.append("function Jumping(){ /r/n/t");
strPages.append("document." + formName + ".submit();/r/n/t");
strPages.append("return ;/r/n");
strPages.append("}/r/n");
strPages.append("function gotoPage(pagenum){ /r/n/t");
strPages.append("document." + formName
+ ".pageSize.value = pagenum;/r/n/t");
strPages.append("document." + formName + ".submit();/r/n/t");
strPages.append("return ;/r/n");
strPages.append("}/r/n");
strPages.append("-->/r/n");
strPages.append("/r/n</script>/r/n");
strPages.append("<table border=0 align=center>/r/n");
strPages.append("<form name=" + formName + " action=" + aUrl
+ " method=post>/r/n");
strPages.append("<tr>/r/n/t<td>/r/n/t/t");
strPages.append("<b>共 <font color=#930909>" + this.getMaxRowCount()
+ "</font> 条记录</b> /r/n/t");
if (getMaxPage() == 1 || getMaxRowCount() == 0) {
strPages
.append("/t<font face=webdings color=#930909>9</font><font color=#930909><b>"
+ strFirstPage + "</b></font>/r/n/t");
strPages
.append("/t<font face=webdings color=#930909>7</font><font color=#930909><b>"
+ strPrevPage + "</b></font>/r/n/t");
strPages
.append("/t<font color=#930909><b>"
+ strNextPage
+ "</b></font><font face=webdings color=#930909>8</font>/r/n/t");
strPages
.append("/t<font color=#930909><b>"
+ strLastPage
+ "</b></font><font face=webdings color=#930909>:</font>/r/n/t");
} else if (getMaxPage() > 1 && getCurPage() == 1) {
strPages
.append("/t<font face=webdings color=#930909>9</font><font color=#930909><b>"
+ strFirstPage + "</b></font>/r/n/t");
strPages
.append("/t<font face=webdings color=#930909>7</font><font color=#930909><b>"
+ strPrevPage + "</b></font>/r/n/t");
strPages.append("/t<a href=/"javascript:gotoPage("
+ (getCurPage() + 1) + ")/"><font color=black><b>"
+ strNextPage
+ "</b></font></a><font face=webdings>8</font>/r/n/t");
strPages.append("/t<a href=/"javascript:gotoPage(" + getMaxPage()
+ ")/"><font color=black><b>" + strLastPage
+ "</b></font></a><font face=webdings>:</font>/r/n/t");
} else if (getMaxPage() > 1 && getCurPage() < getMaxPage()) {
strPages
.append("/t<font face=webdings>9</font><a href=/"javascript:gotoPage(1)/"><font color=black><b>"
+ strFirstPage + "</b></font></a>/r/n/t");
strPages
.append("/t<font face=webdings>7</font><a href=/"javascript:gotoPage("
+ (getCurPage() - 1)
+ ")/"><font color=black><b>"
+ strPrevPage + "</b></font></a>/r/n/t");
strPages.append("/t<a href=/"javascript:gotoPage("
+ (getCurPage() + 1) + ")/"><font color=black><b>"
+ strNextPage
+ "</b></font></a><font face=webdings>8</font>/r/n/t");
strPages.append("/t<a href=/"javascript:gotoPage(" + getMaxPage()
+ ")/"><font color=black><b>" + strLastPage
+ "</b></font></a><font face=webdings>:</font>/r/n/t");
} else if (getMaxPage() > 1 && getCurPage() == getMaxPage()) {
strPages
.append("/t<font face=webdings>9</font><a href=/"javascript:gotoPage(1)/"><font color=black><b>"
+ strFirstPage + "</b></font></a>/r/n/t");
strPages
.append("/t<font face=webdings>7</font><a href=/"javascript:gotoPage("
+ (getCurPage() - 1)
+ ")/"><font color=black><b>"
+ strPrevPage + "</b></font></a>/r/n/t");
strPages
.append("/t<font color=#930909><b>"
+ strNextPage
+ "</b></font><font face=webdings color=#930909>8</font>/r/n/t");
strPages
.append("/t<font color=#930909><b>"
+ strLastPage
+ "</b></font><font face=webdings color=#930909>:</font>/r/n/t");
}
// strPages.append("/t<font color=black><b>转至:</b></font>/r/n/t/t<input
// type='text' name='page' size=4 maxlength=4 value=" +
// getCurPage() +
// " onKeyDown = /"javaScript:return dFilter(event.keyCode,this);/"" +
// ">" +
// "/r/n/t/t<input type='submit' value='Go' name='cndok'>/r/n/t");
//----------------------------------------------------------------------]
//显示 n 条记录(行)/页
//strPages.append("/t <b><font color=#930909>" + getRowsPerPage()
// +
//"</font> 条记录(行)/页</b>/r/n/t");
//----------------------------------------------------------------------
strPages
.append("/t<font color=black><b>"
+ strGoto
+ "</b></font>/r/n/t/t<select name='pageSize' οnchange='Jumping()'>");
for (int i = 1; i <= this.getMaxPage(); i++) {
if (i == this.getCurPage()) {
strPages.append("/r/n/t/t/t<option selected value=" + i + ">第 "
+ i + " 页</option>");
} else {
strPages.append("/r/n/t/t/t<option value=" + i + ">第 " + i
+ " 页</option>");
}
}
strPages.append("/r/n/t/t</select>/r/n/t");
strPages
.append("/t<font color=black><b>"
+ strCurrentPage
+ ":</b></font><font color=#930909><b>"
+ getCurPage()
+ "</b></font>/r/n/t/t<font color=black><b>/</b></font>/r/n/t/t<font color=#930909><b>"
+ getMaxPage()
+ "</b></font><font color=black><b> 页 </b></font>");
strPages.append("/r/n/t<td>/r/n<tr>/r/n</form>/r/n</table>");
return strPages.toString();
}
/**
* <p>
* 根据Page 类的 target 属性和分页相关信息,获取前台页面提交表单和页面信息的 HTML 代码
* </p>
* <p>
* 注意:使用该方法之前,必须设置 Page 类的 target属性
* </p>
*
* @return - 前台页面提交表单和页面信息的 HTML 代码
*/
public String getPageStr() {
return this.getPageStr(target);
}
/**
* 打印 Page 对象的当前信息
*/
public String toString() {
return "当前是第 " + curPage + " 页;共有 " + maxPage + " 页,共 " + maxRowCount
+ " 条记录(行);每页 " + rowsPerPage + " 条记录(行)";
}
}
public Page getStudentList(String page) {
ResultSet rst = null;
ArrayList list = new ArrayList();
int pageNum;
if (page == null || page.equals("")) pageNum = 1;
else pageNum = Integer.parseInt(page);
p.setRowsPerPage(6); //每页显示6行
String s1 = "select top " + pageNum * p.getRowsPerPage() + " * from table where ....";
String s2 = "select count(*) from table where ...";
pstmt = conn.prepareStatement(s2);
rst = pstmt.executeQuery();
if (rst.next()) p.setMaxRowCount(rst.getInt(1)); //取得一共的行数
pstmt = null;
rst = null;
pstmt = conn.prepareStatement(s1, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
rst = pstmt.executeQuery();
int i = (pageNum - 1) * p.getRowsPerPage(); //
if (i != 0) rst.absolute(i);
while (rst.next()) {
...
list.add(...);
}
p.setCurPage(pageNum); //第几页
p.setList(list); //list
p.setMaxPage(); //最大页数
return p;
}
特殊用法:
public Page searchGroup(Group group, int pageSize) throws DaoException {
Page page = new Page();
try {
Session session = HibernateUtil.currentSession();
HibernateUtil.beginTransaction();
Example exampleGroup = Example.create(group);
exampleGroup.ignoreCase().enableLike(MatchMode.ANYWHERE);
//exampleGroup.excludeZeroes();
Criteria criteria = session.createCriteria(Group.class).add(
exampleGroup).addOrder(Order.asc("groupCreateDate"));
List list = criteria.list();
page.setMaxRowCount(list.size());
//page.setRowsPerPage(2);
page.setMaxPage();
page.setFormName("groupInfoForm");
Debug.println("记录的总页数为:" + page.getMaxPage());
//判断如果分页数大于最大页数,则将页数设置为第一页
if (pageSize > page.getMaxPage() || pageSize < 0) {
Debug.println("警告:请求的分页数 " +
pageSize + " 大于该记录的总页数 " +
page.getMaxPage() +
" 或者小于 0 ,请求的页数将置为 1 。");
pageSize = 1;
}
//设置当前页数
page.setCurPage(pageSize);
list = criteria.setMaxResults(page.getRowsPerPage())
.setFirstResult((pageSize - 1) * page.getRowsPerPage())
.list();
page.setList(list);
HibernateUtil.commitTransaction();
} catch (HibernateException ex) {
HibernateUtil.rollbackTransaction();
} finally {
HibernateUtil.closeSession();
}
return page;
Page page = groupService.getGroupList(1);
page.setTarget(request.getContextPath() + "/group/EditGroup.jsp");
request.setAttribute("groupPageList",page);
jsp页面用法:
<%
String strpage = request.getParameter("Page");
int PageNum;
if (strpage != null) {
PageNum = Integer.parseInt(strpage);
}
else {
PageNum = 1;
}
Page pagelist = new Page();
pagelist = SimpleGroup.getGroupLists(PageNum);
//request.setAttribute("gps", pagelist.getList());
List groupList = pagelist.getList();
%>
<%
for(int i=0;<groupList.size();i++){
Group group = (Group)groupList.get(i);
out.println(group.getName());
}
%>
//生成前台分页信息
<%
if (pagelist.getList() != null) {
out.print(pagelist.pageStr("/"viewGroups.jsp/""));
}
%>