|    
 
|  [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 » 
 
 
 
 
 
 | 
    |  .: 公告 
 |  
    |  
     | | « | October 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 | 31 |  | |  | 
 |  
 .: 我的分类(专题)  |  
    |  
 .: 最新日志    .: 最新回复
 
 
 
 |  
    |  
    | blog名称:up forever 日志总数:130
 评论数量:274
 留言数量:4
 访问次数:1953918
 建立时间:2006年5月25日
 |  
 |  
    |  
 .: 留言板  |  
    |  
   .: 链接  |  
  
 
 |