锁定老帖子 主题:自己优化的struts分页
精华帖 (0) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-12-21
这是PageBean import java.util.ArrayList; import java.util.List; public class PageBean extends BaseBean{ /** * */ private static final long serialVersionUID = 1L; private int currentPage=1;//当前页 private int totalPages=0;//总页数 private int pageSize=11;//每页显示条数 private int totalRows=0;//总条数 private int pageStartRow=0;//开始条数 private int pageEndRow=0;//结束条数 private boolean hasNextPage=false;//是否存在下一页 private boolean hasPreviousPage=false;//是否存在上一页 private boolean hasNextNextPage=false;//是否存在上上一页(一次跳转10页) private boolean hasPreviousPreviousPage=false;//是否存在下下一页(一次跳转10页) private int nextPage=0;//下一页的页号 private int perviousPage=0;//上一页的页号 private int nextNextPage=0; private int perviousPerviousPage=0; private List pages; public PageBean(){ pages=new ArrayList(); } public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } public void setTotalPages(int totalPages) { this.totalPages = totalPages; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public void setTotalRows(int totalRows) { this.totalRows = totalRows; } public void setPageStartRow(int pageStartRow) { this.pageStartRow = pageStartRow; } public void setPageEndRow(int pageEndRow) { this.pageEndRow = pageEndRow; } public void setHasNextPage(boolean hasNextPage) { this.hasNextPage = hasNextPage; } public void setHasPreviousPage(boolean hasPreviousPage) { this.hasPreviousPage = hasPreviousPage; } public void setNextPage(int nextPage) { this.nextPage = nextPage; } public void setPerviousPage(int perviousPage) { this.perviousPage = perviousPage; } public int getCurrentPage() { return currentPage; } public int getTotalPages() { return totalPages; } public int getPageSize() { return pageSize; } public int getTotalRows() { return totalRows; } public int getPageStartRow() { return pageStartRow; } public int getPageEndRow() { return pageEndRow; } public boolean isHasNextPage() { return hasNextPage; } public boolean isHasPreviousPage() { return hasPreviousPage; } public int getNextPage() { return nextPage; } public int getPerviousPage() { return perviousPage; } public boolean isHasNextNextPage() { return hasNextNextPage; } public void setHasNextNextPage(boolean hasNextNextPage) { this.hasNextNextPage = hasNextNextPage; } public boolean isHasPreviousPreviousPage() { return hasPreviousPreviousPage; } public void setHasPreviousPreviousPage(boolean hasPreviousPreviousPage) { this.hasPreviousPreviousPage = hasPreviousPreviousPage; } public int getNextNextPage() { return nextNextPage; } public void setNextNextPage(int nextNextPage) { this.nextNextPage = nextNextPage; } public int getPerviousPerviousPage() { return perviousPerviousPage; } public void setPerviousPerviousPage(int perviousPerviousPage) { this.perviousPerviousPage = perviousPerviousPage; } public List getPages() { return pages; } public void setPages(List pages) { this.pages = pages; } } 再下来是主要的算法 pageSession public class PageSessionBean { PageBean pvb = new PageBean(); public PageBean pagebean(int total, int pagesize) { // pvb.setPageSize(pagesize); pvb.setTotalRows(total); pvb.setCurrentPage(1); pvb.setHasPreviousPage(false); pvb.setHasPreviousPreviousPage(false); pvb.setPageStartRow(0); if (total % pagesize == 0) { pvb.setTotalPages(total / pagesize); } else { pvb.setTotalPages((total / pagesize) + 1); } if (pvb.getTotalPages() > 1) { pvb.setNextPage(2); pvb.setHasNextPage(true); } else { pvb.setHasNextPage(false); } if (pvb.getTotalPages() > 10) { pvb.setHasNextNextPage(true); pvb.setNextNextPage(11); } else { pvb.setHasNextNextPage(false); } pvb.getPages().removeAll(pvb.getPages()); // 移除列表里面的所有对象 for (int i = 1; i <= pvb.getTotalPages() && i <= 10; i++) { Integer temp = new Integer(i); pvb.getPages().add(temp); } return pvb; } public PageBean gotoPage(int pagesize, int pageNo) { pvb.setPageSize(pagesize); pvb.setCurrentPage(pageNo); if (pageNo <= 6) { // 当从用户输入框里面输入的数字小于6的时候 pvb = pagebean(pvb.getTotalRows(), pvb.getPageSize()); pvb.setCurrentPage(pageNo); } else if (pageNo > 6 && pageNo <= pvb.getTotalPages()) {//当输入大于6且小于总页数的时候 int tr=pageNo; pvb.getPages().removeAll(pvb.getPages()); if(pvb.getTotalPages()>6&&pvb.getTotalPages()<=10){ for(int i=1;i<=pvb.getTotalPages();i++){ Integer t=new Integer(i); pvb.getPages().add(t); }} else{ for(int i=tr-5;i<=tr+4&&i<=pvb.getTotalPages();i++){ Integer t=new Integer(i); pvb.getPages().add(t); } } // //int num = 0; // pageNo十位上的数字 // // num = pageNo / 10; // //if (pvb.getTotalPages() > (num + 1) * 10) { // // 当页的总数大于这个区间的数字时 // Integer tr = new Integer(num * 10+1); // pvb.getPages().removeAll(pvb.getPages()); // pvb.getPages().add(tr); // for (int i = 2; i <=10; i++) { // Integer t = new Integer(num * 10 + i); // pvb.getPages().add(t); // } // } else { // Integer tr = new Integer(num * 10+1); // pvb.getPages().removeAll(pvb.getPages()); // pvb.getPages().add(tr); // for (int i = 2; i < pvb.getTotalPages() - (num * 10) + 1; i++) { // Integer t = new Integer(num * 10 + i); // pvb.getPages().add(t); // } // } pvb.setCurrentPage(pageNo); } else { //当输入的页数大于总页数的时候 int num=0; //得到总页数的十位数字 num=pvb.getTotalPages()/10; pvb.getPages().removeAll(pvb.getPages()); for(int i=num*10+1;i<pvb.getTotalPages()+1;i++){ Integer t = new Integer(i); pvb.getPages().add(t); } pvb.setCurrentPage(pvb.getTotalPages()); } if(pageNo+1<=pvb.getTotalPages()){ pvb.setNextPage(pageNo+1); pvb.setHasNextPage(true); }else{ pvb.setHasNextNextPage(false); pvb.setNextPage(0); } if(pageNo+10<=pvb.getTotalPages()){ pvb.setNextNextPage(pageNo+10); pvb.setHasNextNextPage(true); }else{ pvb.setHasNextNextPage(false); pvb.setNextNextPage(0); } if(pageNo-10>=1){ pvb.setPerviousPerviousPage(pageNo-10); pvb.setHasPreviousPreviousPage(true); }else{ pvb.setHasPreviousPreviousPage(false); pvb.setPerviousPerviousPage(0); } if(pageNo-1>=1){ pvb.setPerviousPage(pageNo-1); pvb.setHasPreviousPage(true); }else{ pvb.setHasPreviousPage(false); pvb.setPerviousPerviousPage(0); } pvb.setPageStartRow((pvb.getCurrentPage() - 1) * pvb.getPageSize()); return pvb; } } 有些方法可能没用到。所以我注释掉了。 这个优化完应该算是一个功能比较全的分页了。。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-12-22
关注。。。。
|
|
返回顶楼 | |
发表时间:2008-12-22
偶太懒,还是标签适合我
|
|
返回顶楼 | |
发表时间:2008-12-22
优化在那里?
|
|
返回顶楼 | |
发表时间:2008-12-22
楼主应该注明一下你的优化主要体现在哪
|
|
返回顶楼 | |
发表时间:2008-12-22
就是增加了一些功能,主要在gotoPage()这个方法里面。
算是分页里比较全的了吧 类似百度贴吧那个分页 首页 上一页 1 2 3 4 5 6 7 8 9 10 下一页 末页 跳到第?页 被注释掉那部分功能是 首页 前十页 上一页 1 2 3 4 5 6 7 8 9 10 下一页 后十页 末页 喜欢那种根据自己的爱好。 不过后面这种需要把前面的稍加修改一下 |
|
返回顶楼 | |
发表时间:2008-12-31
楼主不jsp也贴出来啊
|
|
返回顶楼 | |
发表时间:2008-12-31
分页在struts2中什么标签比较好用啊,我知道ext里有个很好用的标签
|
|
返回顶楼 | |
发表时间:2009-06-01
老哥 怎么调用这些方法?
|
|
返回顶楼 | |
发表时间:2009-06-01
在怎么优化你的计算方法还是在服务端完成 分页无非是在数据库查询从第几条开始 取多少条数据 服务端只要完成这个功能就可以了 其他的页码的计算都可以交给客户端的js完成
action 中的代码 String start = request.getParameter("start") == null ? "0" : request.getParameter("start"); int count = request.getParameter("count") == null ? -1 : Integer.parseInt(request.getParameter("count")); if (count == -1) count=testService.findTestCount(); int pageCount=10; List list=testService.findTest(Integer.parseInt(start), pageCount); 具体的查询用的就是 hibernate的 q.setFirstResult(0); q.setMaxResults(10); js 分页代码 /** * 分页显示方法 * @param {} url * @param {} objFrom * @param {} count * @param {} pageStart * @param {} pageCount */ var Page=function(url,objFrom,count,pageStart,pageCount){ // 计算总页数 var pages = Math.floor(count / pageCount); // 在不被整除的情况下页数加一 if (count % pageCount != 0) pages = pages + 1; // 计算当前的页码 var curPage=Math.floor(pageStart / pageCount)+1; var strOptions = ""; for (var i = 1; i <= pages; i++) { if(parseInt(curPage)==i) strOptions = strOptions + "<option value=\"" + i + "\" selected=\"selected\">" + i + "</option>"; else strOptions = strOptions + "<option value=\"" + i + "\">" + i + "</option>"; } var pageContent ="<div style=\"float:left; width:100%; text-align:center; padding-top:3\">"; // 判断是否为第一页 if(curPage<=1) pageContent=pageContent+"\u7b2c\u4e00\u9875 | \u4e0a\u4e00\u9875 | "; else pageContent=pageContent+"<a href=\"javascript:toPage('"+url+"',"+objFrom.name+",1,"+pages+","+pageCount+","+count+")\">\u7b2c\u4e00\u9875</a> | <a href=\"javascript:toPreview('"+url+"',"+objFrom.name+","+curPage+","+pages+","+pageCount+","+count+")\">\u4e0a\u4e00\u9875</a> | "; // 判断是否为最后一页 if(curPage>=pages) pageContent=pageContent+"\u4e0b\u4e00\u9875 | \u6700\u540e\u4e00\u9875"; else pageContent=pageContent+"<a href=\"javascript:toNext('"+url+"',"+objFrom.name+","+curPage+","+pages+","+pageCount+","+count+")\" class=\"black\">\u4e0b\u4e00\u9875</a> | <a href=\"javascript:toPage('"+url+"',"+objFrom.name+","+pages+","+pages+","+pageCount+","+count+")\" class=\"black\">\u6700\u540e\u4e00\u9875</a>"; pageContent = pageContent+" \u5171 " + count + " \u6761\u4fe1\u606f, " + curPage+ " / " + pages+ " \u9875 \u9009\u62e9\u9875\u7801 \uff1a<select onchange=\"toChange('"+url+"',"+objFrom.name+",this,"+pages+","+pageCount+","+count+")\">" + strOptions + "</select></div>"; // 输出到页面 document.write(pageContent); } /** * 跳转到指定页面 * @param {} url * @param {} objFrom * @param {} page * @param {} sumPages * @param {} pageRow * @param {} count */ function toPage(url,objFrom,page,sumPages,pageRow,count) { if (page <= parseInt(sumPages) && page>0) { var start=(page - 1) * parseInt(pageRow); if(url.indexOf('?')==-1) url=url+'?start='+start+'&count='+count; else url=url+'&start='+start+'&count='+count; objFrom.action=url; objFrom.submit(); } } /** * 采用select的onChange方法跳转的页面 * @param {} url * @param {} objFrom * @param {} obj * @param {} sumPages * @param {} pageRow * @param {} count */ function toChange(url,objFrom,obj,sumPages,pageRow,count) { var page= obj.options[obj.selectedIndex].value; if (page <= parseInt(sumPages) && page>0) { var start=(page - 1) * parseInt(pageRow); if(url.indexOf('?')==-1) url=url+'?start='+start+'&count='+count; else url=url+'&start='+start+'&count='+count; objFrom.action=url; objFrom.submit(); } } /** * 跳转到上一页方法 * @param {} url * @param {} objFrom * @param {} curPage * @param {} sumPages * @param {} pageRow * @param {} count */ function toPreview(url,objFrom,curPage,sumPages,pageRow,count){ var page= parseInt(curPage)-1 if ( page > 0) { var start=(page - 1) * parseInt(pageRow); if(url.indexOf('?')==-1) url=url+'?start='+start+'&count='+count; else url=url+'&start='+start+'&count='+count; objFrom.action=url; objFrom.submit(); } } /** * 跳转到下一页方法 * @param {} url * @param {} objFrom * @param {} curPage * @param {} sumPages * @param {} pageRow * @param {} count */ function toNext(url,objFrom,curPage,sumPages,pageRow,count) { var page= parseInt(curPage)+ 1 if ( page <= parseInt(sumPages)) { var start=(page - 1) * parseInt(pageRow); if(url.indexOf('?')==-1) url=url+'?start='+start+'&count='+count; else url=url+'&start='+start+'&count='+count; objFrom.action=url; objFrom.submit(); } } jsp中 <script language="javascript" src="js/pageUtil.js"></script> <script language="javascript"> new Page('testAction.do',document.testFrom,${count},${start},${pageCount}); </script> count start pageCount 三个参数是由action中返回 无论是普通的servlet 还是struts1 或2 原理都是相同的 可以再优化一下js的计算但也无关紧要了 现在个人电脑已经足够用了 |
|
返回顶楼 | |