[J2EE]一个简单的分页(struts+hibernate+spring) |
今天搜集了好多资料,研究了一个用j2ee写的分页算法:
public List findAllStr(final String con, final int pageNo, final int page_size) { return getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session s) throws HibernateException, SQLException { Query query = s.createQuery(con); query.setFirstResult(page_size*(pageNo-1)); query.setMaxResults(page_size); List list = query.list(); return list; } }); }
这个是数据库层的操作,action调用是:
String page = httpServletRequest.getParameter("page"); int pageno = 1; //当前页码 if (page != null && !page.equals("")) pageno = Integer.parseInt(page); int PAGE_SIZE = 10; //每页显示记录数 productService = (ProductService)wac.getBean("productService"); List list = productService.findAllStr("from Product p",pageno,PAGE_SIZE); int amount=productService.findAllProduct().size(); String pageHeader = "本类别共" + amount + "条记录,每页显示" + PAGE_SIZE + "条"; String url = "product.do?call=listAll"; com.dodomark.util.Pager pager = new com.dodomark.util.Pager(amount, PAGE_SIZE, url, pageHeader, pageno); httpServletRequest.setAttribute("navigation", pager.getPaginationNavigation()); httpServletRequest.setAttribute("allproductList", list); return actionMapping.findForward("allList");
然后页面上得到这个allproductList对象,把里面的属性循环输出,分页显示是:
<%=request.getAttribute("navigation")%>
感觉这个方法不是很完美,因为如果页数很多,就麻烦了,有待于改进。
pager 类是:
package com.dodomark.util;
public class Pager {
private int rowsCount = 0; //总记录数 private int pageCount = 0; //总页数:需要计算(rowsCount + pageSize -1) / pageSize private int pageSize = 8; //每页显示的记录数 private int currentPage = 1; //要显示的当前页 private String url = ""; //.do的url private String pageHeader = ""; //导航条的前缀文字提示
//构造器 public Pager() { }
public Pager(int rowsCount, int pageSize, String url, String pageHeader, int currentPage) { this.setRowsCount(rowsCount); this.setPageSize(pageSize); if(url != null) this.url = url; if(pageHeader != null) this.pageHeader = pageHeader; this.currentPage = currentPage; }
/** * 获得导航条 * @return String */ public String getPaginationNavigation() { // TODO Auto-generated method stub String pageNavigation = ""; //最终返回的分页导航条 //记录数超过一页,需要分页 //if (rowsCount > pageSize) { String pref; //前缀 if (url.indexOf("?") > -1) { //如果url中已经包含了其他的参数,就把currentPage参数接在后面 pref = "&"; } else { //如果url中没有别的参数 pref = "?"; } //如果导航条包含header if (pageHeader != null && pageHeader.length() > 0) { pageNavigation = pageHeader + " : "; } //如果不是第一页,导航条将包含“<<”(第一页)和“<”(前一页) if (currentPage > 1) pageNavigation += "<a href='" + url + pref + "page=1'>[首 页]</a>\n" + "<a href='" + url + pref + "page=" + (currentPage - 1) + "'>[上一页]</a>\n"; else pageNavigation += "<a href='" + url + pref + "page=1'>[首 页]</a>\n" + "<a href='" + url + pref + "page=1'>[上一页]</a>\n";
//导航条中,排头的那一页的page值 int startPage = 1; for (int i = startPage; i <= pageCount; i ++) { if (i == currentPage) { //当前页号,加粗显示 pageNavigation += "<b>" + i + "</b>\n"; } else { //其他页号,包含超链接 pageNavigation += "<a href='" + url + pref + "page=" + i + "'>" + i + "</a>\n"; } } //如果不是最后一页,导航条将包含“>”(下一页)和“>>”(最后一页) if (currentPage < pageCount) pageNavigation += "<a href='" + url + pref + "page=" + (currentPage + 1) + "'>[下一页]</a>\n" + "<a href='" + url + pref + "page=" + pageCount + "'>[尾 页]</a>\n"; else pageNavigation += "<a href='" + url + pref + "page=" + pageCount + "'>[下一页]</a>\n" + "<a href='" + url + pref + "page=" + pageCount + "'>[尾 页]</a>\n";
return pageNavigation; //} //记录不超过一页,不需要分页 //else { // return ""; //} }
//setter和getter方法
/** * 返回最后一页的记录数 * @return int */ public int rowsCountOfLastPage() { int count = 0; if (rowsCount % pageSize == 0) { count = pageSize; } else { count = rowsCount % pageSize; } return count; }
/** * 返回最后一页的起始记录位置 * @return int */ public int offsetOflastPage() { return rowsCount - rowsCountOfLastPage(); }
//setter和getter方法 public int getRowsCount() { return rowsCount; }
public void setRowsCount(int rowsCount) { this.rowsCount = rowsCount; pageCount = (rowsCount + pageSize - 1) / pageSize; }
public int getPageSize() { return pageSize; }
public void setPageSize(int pageSize) { this.pageSize = pageSize; this.pageCount = (rowsCount + pageSize -1) / pageSize; }
public int getPageCount() { return this.pageCount; }
public int getCurrentPage() { return currentPage; }
public void setCurrentPage(int currentPage) { this.currentPage = currentPage; }
//禁止设置页数/* public void setPageCount(int pageCount) { this.pageCount = pageCount; }*/
public String getUrl() { return url; }
public void setUrl(String url) { this.url = url; }
public String getPageHeader() { return pageHeader; }
public void setPageHeader(String pageHeader) { this.pageHeader = pageHeader; }}
|
|
回复:一个简单的分页(struts+hibernate+spring) |
xcvxcc(游客)发表评论于2007/3/5 14:16:50 | 一次可以下载多个浏览器,最后我想你会选择火狐浏览器,不信?你进入看看!ie6.0ie7.0遨游浏览器
|
|
回复:一个简单的分页(struts+hibernate+spring) |
upforever(游客)发表评论于2007/2/26 13:04:05 | 以上的两个人我一个也猜不出来,也不要嘴嘴了,请吃饭还可以试试,关于jack说的displaytag我用了,extremetable组件,但是很多局限型,等有着一日我有时间了,改改,现在太忙了,至于haha高手说的存储过程分页我还真不知道,请教高手
|
|
回复:一个简单的分页(struts+hibernate+spring) |
你的同学猜(游客)发表评论于2007/2/17 16:15:49 | 少敏,新年快乐。回家了吧,新年新气象,龙马精神。
|
|
回复:一个简单的分页(struts+hibernate+spring) |
哎呀(游客)发表评论于2007/2/14 18:37:35 | 新年快乐,希望你能过的好.忘记所有的不开心.加油!!!!!!!!!!!
你的一个朋友(猜猜偶是谁,猜对给你一个嘴嘴)
|
|
回复:一个简单的分页(struts+hibernate+spring) |
haha(游客)发表评论于2007/2/14 15:50:39 | 为什么不用存储过程分页呢?~
|
|
回复:一个简单的分页(struts+hibernate+spring) |
Jack(游客)发表评论于2007/2/14 15:06:12 | 体验一下displaytag吧,不但能分页,还能排序,还能导出csv xml excel pdf等.
|
|
» 1 »
|  .: 公告
|
« | September 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | | | | |
| .: 我的分类(专题) |  .: 最新日志 .: 最新回复
| 
blog名称:up forever 日志总数:130 评论数量:274 留言数量:4 访问次数:1949273 建立时间:2006年5月25日 |
|  .: 留言板 |  .: 链接 |

|