分页处理的bean类PageableResultSet.java的构造函数参数为一个ResultSet对象,即执行查询语句得到的ResultSet。其具体代码如下:
public
class
PageableResultSet
... extends ResultSet
{

protectedjava.sql.ResultSetrs=null;

protectedintrowsCount;

protectedintpageSize;

protectedintcurPage;

protectedStringcommand="";

publicPageableResultSet(java.sql.ResultSetrs)

throwsjava.sql.SQLException...{
if(rs==null)
thrownewSQLException("givenResultSetisNULL","user");

rs.last();//将指针移动到此ResultSet对象的最后一行
rowsCount=rs.getRow();//检索当前行编号
rs.beforeFirst();//将指针移动到此ResultSet对象的开头,正好位于第一行之前

this.rs=rs;
}


/***//**返回当前页号
*/

publicintgetCurPage()...{
returncurPage;
}


/***//**返回总页数
*/

publicintgetPageCount()...{
if(rowsCount==0)
return0;
if(pageSize==0)
return1;
//calculatePageCount
doubletmpD=(double)rowsCount/pageSize;
inttmpI=(int)tmpD;
if(tmpD>tmpI)
tmpI++;
returntmpI;
}


/***//**返回当前页的记录条数
*/

publicintgetPageRowsCount()...{
if(pageSize==0)
returnrowsCount;
if(getRowsCount()==0)
return0;
if(curPage!=getPageCount())
returnpageSize;
returnrowsCount-(getPageCount()-1)*pageSize;

}


/***//**返回分页大小
*/

publicintgetPageSize()...{
returnpageSize;
}


/***//**返回总记录行数
*/

publicintgetRowsCount()...{
returnrowsCount;
}


/***//**转到指定页
*/

publicvoidgotoPage(intpage)...{
if(rs==null)
return;
if(page<1)
page=1;
if(page>getPageCount())
page=getPageCount();
introw=(page-1)*pageSize+1;

try...{
rs.absolute(row);//将指针移动到此ResultSet对象的给定行编号
curPage=page;

}catch(java.sql.SQLExceptione)...{
}
}


/***//**
*转到当前页的第一条记录
*@exceptionjava.sql.SQLException异常说明。
*/

publicvoidpageFirst()throwsSQLException...{
introw=(curPage-1)*pageSize+1;
rs.absolute(row);
}


/***//**
*转到当前页的最后一条记录
*@exceptionjava.sql.SQLException异常说明。
*/

publicvoidpageLast()throwsSQLException...{
introw=(curPage-1)*pageSize+getPageRowsCount();
rs.absolute(row);
}


/***//**设置分页大小
*/

publicvoidsetPageSize(intpageSize)...{

if(pageSize>=0)...{
this.pageSize=pageSize;
curPage=1;
}
}
public boolean next() throws SQLException {
// TODO Auto-generated method stub
return rs.next();
}
}
分页action类PageAction.java的关键代码如下:
/**/
/*
*GeneratedbyMyEclipseStruts
*Templatepath:templates/java/JavaClass.vtl
*/
package
com.lyt.struts.action;

import
javax.servlet.ServletContext;
import
javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;
import
javax.servlet.http.HttpSession;
import
javax.sql.DataSource;

import
org.apache.struts.action.Action;
import
org.apache.struts.action.ActionForm;
import
org.apache.struts.action.ActionForward;
import
org.apache.struts.action.ActionMapping;

import
bean.
*
;

import
common.
*
;

import
java.sql.ResultSet;
import
java.sql.SQLException;
import
java.util.
*
;
import
dao.ApplicationDAO;


/***/
/**
*MyEclipseStruts
*Creationdate:07-14-2007
*
*XDocletdefinition:
*@struts.actionvalidate="true"
*/

public
class
PageAction
extends
Action
...
{

/**//*
*GeneratedMethods
*/


/***//**
*Methodexecute
*@parammapping
*@paramform
*@paramrequest
*@paramresponse
*@returnActionForward
*/
publicActionForwardexecute(ActionMappingmapping,ActionFormform,

HttpServletRequestrequest,HttpServletResponseresponse)...{

ServletContextcontext=servlet.getServletContext();
//从配置文件中得到数据源
DataSourcedataSource=(DataSource)context.getAttribute("db");
DBdb=newDB(dataSource);
HttpSessionsession=request.getSession();

try...{
request.setCharacterEncoding("gb2312");

}catch(Exceptione)...{
e.printStackTrace();
}
UserBeanuser=(UserBean)session.getAttribute("usr");

if(user==null)...{
returnmapping.findForward("invalidSession");
}
intstaffId=user.getID();
StringsappType=request.getParameter("appType");


intappType=Integer.valueOf(sappType).intValue();
ResultSetrs=ApplicationDAO.getBjsxRS(db,staffId,appType);

intpageNumber=1;

try...{
pageNumber=Integer.parseInt(request.getParameter("pageNumber"));

}catch(Exceptione)...{
pageNumber=1;
}
PageableResultSetprs=null;

try...{
prs=newPageableResultSet(rs);

}catch(Exceptione)...{
e.printStackTrace();
}
prs.setPageSize(10);








































































































































public boolean next() throws SQLException {
// TODO Auto-generated method stub
return rs.next();
}

分页action类PageAction.java的关键代码如下:































































































