本站首页    管理页面    写新日志    退出

The Neurotic Fishbowl

[J2EE]一个简单的分页(struts+hibernate+spring)
snowrose 发表于 2007/2/14 14:33:40

今天搜集了好多资料,研究了一个用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;        }}

阅读全文(5512) | 回复(7) | 编辑 | 精华

 


回复:一个简单的分页(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 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)

 
 



The Neurotic Fishbowl

.: 公告




Bloginess

«September 2025»
123456
78910111213
14151617181920
21222324252627
282930

.: 我的分类(专题)

首页(130)
RIA(22)
linux(3)
J2EE(24)
the mood of everyday(58)
oral English(14)
database(2)
soap(3)
java(9)
web developer center(14)


In the Bowl

.: 最新日志

倾情奉献iphone、ipod、ipho
check ipad's rotatio
css position fixed d
field validation whe
常见浏览器cookie个数和大小限制说明
人类无法抗拒的10种心理,学会它,就能控
读as3cookbook 有感
flex builder linux s
Component returned f
use tramp in emacs i


.: 最新回复

replcica watches
replcica watches
Dell spikes game sit
回复:人类无法抗拒的10种心理,学会它,
回复:人类无法抗拒的10种心理,学会它,
回复:flex builder linu
回复:人类无法抗拒的10种心理,学会它,
回复:人类无法抗拒的10种心理,学会它,
回复:致女人------摘自读者
回复:虚心接受别人的意见,谨慎改正


The Fishkeeper
blog名称:up forever
日志总数:130
评论数量:274
留言数量:4
访问次数:1949273
建立时间:2006年5月25日



Text Me

.: 留言板

签写新留言

参观
这个界面很漂亮!
我试试吧
up forever
该换了!


Other Fish in the Sea

.: 链接


http://blogger.org.cn/blog/more.asp?name=hongrui&id=16955

邢红瑞 

http://niegc.cublog.cn/  聂国聪

http://www.blogjava.net/SteelHand/ 铁手剑谱

http://blog.sina.com.cn/qianqq 糖qq

http://blog.csdn.net/misty_wish   师弟

http://www.bbxy.net/xiaoyu/ Goteet老师

http://www.chinaitpower.com    中国it动力

http://jinyuxi.blog.sohu.com/ 靳羽西




lvetica, sans-serif; MARGIN: 0px 0px 8px; PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px } DIV.blogrollmain { FONT: 12px verdana, arial, helvetica, sans-serif } BLOCKQUOTE { COLOR: #202020; FONT: 11px verdana, arial, helvetica, sans-serif } .tinyfont { FONT: 9px verdana, arial, helvetica, sans-serif } TD { COLOR: #202020; FONT-FAMILY: verdana; FONT-SIZE: 12px } .title { COLOR: #996897; FONT-FAMILY: verdana, sans-serif; FONT-SIZE: 10pt; FONT-WEIGHT: bold } .titlefont { COLOR: #996897; FONT-FAMILY: verdana, sans-serif; FONT-SIZE: 14px; FONT-STYLE: italic } .titlefontarch { BORDER-BOTTOM: 1px solid; BORDER-LEFT: 1px solid; BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; COLOR: #996897; FONT-FAMILY: verdana, sans-serif; FONT-SIZE: 14px; TEXT-ALIGN: center; WIDTH: 100% } .menu_text { COLOR: #c1ae94; FONT-FAMILY: Verdana, Arial, sans-serif; FONT-SIZE: 10px; MARGIN-BOTTOM: 1px } .links { FONT-FAMILY: Verdana, Arial, sans-serif; FONT-SIZE: 11px } .smallfont { COLOR: #202020; FONT-FAMILY: Verdana, Arial, sans-serif; FONT-SIZE: 11px; MARGIN: 0px } A:link { COLOR: #996897; TEXT-DECORATION: none } A:visited { COLOR: #996897; TEXT-DECORATION: none } A:hover { BACKGROUND-COLOR: #996897; COLOR: #610862; TEXT-DECORATION: underline } A { TEXT-DECORATION: none } .content { WIDTH: auto } .dateheader { MARGIN: 0px; PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px; POSITION: relative; WIDTH: auto; Z-INDEX: 3; min-width: 120px } .wbtn1 { BACKGROUND-COLOR: #ffffff; BORDER-BOTTOM: #996897 1px solid; BORDER-LEFT: #996897 1px solid; BORDER-RIGHT: #996897 1px solid; BORDER-TOP: #996897 1px solid; COLOR: #996897; FONT-FAMILY: verdana, arial geneva; FONT-SIZE: 7pt; TEXT-DECORATION: none } .calendar { PADDING-BOTTOM: 4px; PADDING-LEFT: 4px; PADDING-RIGHT: 4px; PADDING-TOP: 4px; TEXT-ALIGN: center } .calhead { BACKGROUND-COLOR: #ffffff; BORDER-BOTTOM: gray 1px solid; COLOR: black; TEXT-ALIGN: center; VERTICAL-ALIGN: middle; WIDTH: 14% } .calbody { BORDER-BOTTOM: 1px solid; TEXT-ALIGN: center; VERTICAL-ALIGN: middle; WIDTH: 14% } .style2 {color: #996897}
本站首页    管理页面    写新日志    退出

The Neurotic Fishbowl

[J2EE]一个简单的分页(struts+hibernate+spring)
snowrose 发表于 2007/2/14 14:33:40

今天搜集了好多资料,研究了一个用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;        }}

阅读全文(5512) | 回复(7) | 编辑 | 精华

 


回复:一个简单的分页(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 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)

 
 



The Neurotic Fishbowl

.: 公告




Bloginess

«September 2025»
123456
78910111213
14151617181920
21222324252627
282930

.: 我的分类(专题)

首页(130)
RIA(22)
linux(3)
J2EE(24)
the mood of everyday(58)
oral English(14)
database(2)
soap(3)
java(9)
web developer center(14)


In the Bowl

.: 最新日志

倾情奉献iphone、ipod、ipho
check ipad's rotatio
css position fixed d
field validation whe
常见浏览器cookie个数和大小限制说明
人类无法抗拒的10种心理,学会它,就能控
读as3cookbook 有感
flex builder linux s
Component returned f
use tramp in emacs i


.: 最新回复

replcica watches
replcica watches
Dell spikes game sit
回复:人类无法抗拒的10种心理,学会它,
回复:人类无法抗拒的10种心理,学会它,
回复:flex builder linu
回复:人类无法抗拒的10种心理,学会它,
回复:人类无法抗拒的10种心理,学会它,
回复:致女人------摘自读者
回复:虚心接受别人的意见,谨慎改正


The Fishkeeper
blog名称:up forever
日志总数:130
评论数量:274
留言数量:4
访问次数:1949273
建立时间:2006年5月25日



Text Me

.: 留言板

签写新留言

参观
这个界面很漂亮!
我试试吧
up forever
该换了!


Other Fish in the Sea

.: 链接


http://blogger.org.cn/blog/more.asp?name=hongrui&id=16955

邢红瑞 

http://niegc.cublog.cn/  聂国聪

http://www.blogjava.net/SteelHand/ 铁手剑谱

http://blog.sina.com.cn/qianqq 糖qq

http://blog.csdn.net/misty_wish   师弟

http://www.bbxy.net/xiaoyu/ Goteet老师

http://www.chinaitpower.com    中国it动力

http://jinyuxi.blog.sohu.com/ 靳羽西




站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.047 second(s), page refreshed 144769188 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号