底层是通过Hibernate的分页来实现的: 主要用到Hibernate的query.setFirstResult( int 开始位置); query.setMaxResults( int 每次显示数量) 。 页面是通过一个自定义类:
把分页热链接 拼接起来,在Action中通过request.setAttribute()把分页热链接字符串发送到显示页面。
二 具体实现:
(1)自定义分页类 : 要拼接的字符串:
拼接后的url:
该类主要包含:每页显示的数量,分页字符串的拼接。 代码:
public class PageParameter {
public static int page_number=10; // 设置每页显示的数量。
/**
*拼接热链接的函数
*@param currentPage 表示当前所在的页数 *@param totalPage 表示总的记录数(条数)
*@param url 表示要提交的Action路径,用url可以使方法供其它模块分页使用
*/
public static String makeUrl( int currentPage , int totalPage , String url ){ StringBuffer sb = new StringBuffer();
int ishave=url.indexOf(“?”); //用来判断拼接url时,是“?page=x”还是 “&page=x”; String addUrl=”” ; // if( ishave== -1 ){
addUrl =url+ “?page=” ;
}else {
addUrl =url+ “&page=” ; }
//拼接“第1页/共3页”字符串
sb.append(“第”).append(currentPage).append(“页/共”).append(totalPage).append(“页 ”) //拼接 “第一页” 的热链接
sb.append(“| 第一页”); //拼接 “上一页” 的热链接
sb.append(“| 上一页”); //拼接 “下一页” 的热链接
sb.append(“|.append(currentPage+1> totalPage? totalPage : currentPage+1).append(“’> 下一页”); //拼接 “最后一页”的热链接
sb.append(“|最后一页|”);
sb.toString();
//其中的page=x 相当一个全局变量,用来传递“当前是第几页页”参数。 } }
-------------------------------------------------------------------------------------------------------------------------------------------
(2)底层DAO方法的实现 分析:
当前是第几页 起始下标 页面显示个数 currentPage startNum rowNum
1 0 10 2 10 10 3 20 10 4 30 10 startNum = (currentPage-1) * rowNum ;
代码:
public List final int startNum=( currentPage-1)*rowNum; return (List public Object doInHibernate(Session session ) throws HibernateException ,SQLException{ Query query=session.createQuery(“from Rights”); //设置起始位置 query.setFirstResult(startNum); //设置取出的记录数 query.setMaxResults(rowNum); return query.list(); } }); } ------------------------------------------------------------------------------------------------------------------------------------------- (3)Action中的实现 分析: 因为要获得总共的页面数:就应该获得所有的记录数,总页面数: totalPage =(int)Math.ceil(rowNum/page_number); 因为每次分页都要查询所以的记录数rowNum,这样每次都要操作数据库,所以可以把 页面总数totalPage保存到session中,这样就只查询一下就OK了。 获得当前的页面数:可以通过pageNum=Integer.paseInt(request.getParamter(“page”));获得。 代码: public ActionForward listrights( ActionMapping mapping, ActionForm form , HttpServletRequest request , HttpServletResponse response){ HttpSession session= request.getSession(); //获得总页面数 Integer totalPage=(Integer)session.getAttribute(“ totalPage”); if( totalPage==null){ //表示是第一次访问。则去数据库查询。 List totalPage=(int)Math.ceil( rights.size()/PageParameter.page_number); //把总页面数保存到session session.setAttribute(“totalPage” ,totalPage) ; } //设置默认的当前页面数,当浏览rights时page=1; int pageNum=1; //当是分页的请求,修改pageNum 的值。 if ( request.getParameter(“page”)!=null){ pageNum=Integer.parseInt( request.getParameter (“page”)) ; } //设置 url String url=request.getContextPath()+request.getServletPath(); // 获得分页的字符串,其中PageParameter是分页类。 String pageSpilt=PageParameter.makeUrl(pageNum , totalPage , url ); request.setAttribute(“pageSpilt” , pageSpilt); request.setAttribute(“rights” rightService.browseRight( pageNum , PageParameter.page_number)); return mapping.findForward(“listrights”); } ------------------------------------------------------------------------------------------------------------------------------------------- 因篇幅问题不能全部显示,请点此查看更多更全内容