自己优化的struts分页

前几天突然想到优化一个分页,结果做了大半天,觉得还不错,分享一下。
这是PageBean
Java代码 复制代码
  1. import java.util.ArrayList;   
  2. import java.util.List;   
  3.   
  4.   
  5. public class PageBean extends BaseBean{   
  6.     /**  
  7.      *   
  8.      */  
  9.     private static final long serialVersionUID = 1L;   
  10.                
  11.             private int currentPage=1;//当前页   
  12.         private int totalPages=0;//总页数   
  13.         private int pageSize=11;//每页显示条数   
  14.         private int totalRows=0;//总条数   
  15.         private int pageStartRow=0;//开始条数   
  16.         private int pageEndRow=0;//结束条数   
  17.         private boolean hasNextPage=false;//是否存在下一页   
  18.         private boolean hasPreviousPage=false;//是否存在上一页   
  19.         private boolean hasNextNextPage=false;//是否存在上上一页(一次跳转10页)   
  20.         private boolean hasPreviousPreviousPage=false;//是否存在下下一页(一次跳转10页)   
  21.         private int nextPage=0;//下一页的页号   
  22.         private int perviousPage=0;//上一页的页号   
  23.         private int nextNextPage=0;    
  24.         private int perviousPerviousPage=0;   
  25.            
  26.         private List pages;   
  27.         public PageBean(){   
  28.             pages=new ArrayList();   
  29.         }   
  30.         public void setCurrentPage(int currentPage) {   
  31.             this.currentPage = currentPage;   
  32.         }   
  33.   
  34.         public void setTotalPages(int totalPages) {   
  35.             this.totalPages = totalPages;   
  36.         }   
  37.   
  38.         public void setPageSize(int pageSize) {   
  39.             this.pageSize = pageSize;   
  40.         }   
  41.   
  42.         public void setTotalRows(int totalRows) {   
  43.             this.totalRows = totalRows;   
  44.         }   
  45.   
  46.         public void setPageStartRow(int pageStartRow) {   
  47.             this.pageStartRow = pageStartRow;   
  48.         }   
  49.   
  50.         public void setPageEndRow(int pageEndRow) {   
  51.             this.pageEndRow = pageEndRow;   
  52.         }   
  53.   
  54.         public void setHasNextPage(boolean hasNextPage) {   
  55.             this.hasNextPage = hasNextPage;   
  56.         }   
  57.   
  58.         public void setHasPreviousPage(boolean hasPreviousPage) {   
  59.             this.hasPreviousPage = hasPreviousPage;   
  60.         }   
  61.   
  62.         public void setNextPage(int nextPage) {   
  63.             this.nextPage = nextPage;   
  64.         }   
  65.   
  66.         public void setPerviousPage(int perviousPage) {   
  67.             this.perviousPage = perviousPage;   
  68.         }   
  69.   
  70.           
  71.   
  72.         public int getCurrentPage() {   
  73.             return currentPage;   
  74.         }   
  75.   
  76.         public int getTotalPages() {   
  77.             return totalPages;   
  78.         }   
  79.   
  80.         public int getPageSize() {   
  81.             return pageSize;   
  82.         }   
  83.   
  84.         public int getTotalRows() {   
  85.             return totalRows;   
  86.         }   
  87.   
  88.         public int getPageStartRow() {   
  89.             return pageStartRow;   
  90.         }   
  91.   
  92.         public int getPageEndRow() {   
  93.             return pageEndRow;   
  94.         }   
  95.   
  96.         public boolean isHasNextPage() {   
  97.             return hasNextPage;   
  98.         }   
  99.   
  100.         public boolean isHasPreviousPage() {   
  101.             return hasPreviousPage;   
  102.         }   
  103.   
  104.         public int getNextPage() {   
  105.             return nextPage;   
  106.         }   
  107.   
  108.         public int getPerviousPage() {   
  109.             return perviousPage;   
  110.         }   
  111.   
  112.         public boolean isHasNextNextPage() {   
  113.             return hasNextNextPage;   
  114.         }   
  115.   
  116.         public void setHasNextNextPage(boolean hasNextNextPage) {   
  117.             this.hasNextNextPage = hasNextNextPage;   
  118.         }   
  119.   
  120.         public boolean isHasPreviousPreviousPage() {   
  121.             return hasPreviousPreviousPage;   
  122.         }   
  123.   
  124.         public void setHasPreviousPreviousPage(boolean hasPreviousPreviousPage) {   
  125.             this.hasPreviousPreviousPage = hasPreviousPreviousPage;   
  126.         }   
  127.   
  128.         public int getNextNextPage() {   
  129.             return nextNextPage;   
  130.         }   
  131.   
  132.         public void setNextNextPage(int nextNextPage) {   
  133.             this.nextNextPage = nextNextPage;   
  134.         }   
  135.   
  136.         public int getPerviousPerviousPage() {   
  137.             return perviousPerviousPage;   
  138.         }   
  139.   
  140.         public void setPerviousPerviousPage(int perviousPerviousPage) {   
  141.             this.perviousPerviousPage = perviousPerviousPage;   
  142.         }   
  143.         public List getPages() {   
  144.             return pages;   
  145.         }   
  146.         public void setPages(List pages) {   
  147.             this.pages = pages;   
  148.         }   
  149.   
  150. }  

再下来是主要的算法
pageSession
Java代码 复制代码
  1. public class PageSessionBean {   
  2.     PageBean pvb = new PageBean();   
  3.   
  4.     public PageBean pagebean(int total, int pagesize) {   
  5.         //   
  6.         pvb.setPageSize(pagesize);   
  7.         pvb.setTotalRows(total);   
  8.         pvb.setCurrentPage(1);   
  9.         pvb.setHasPreviousPage(false);   
  10.         pvb.setHasPreviousPreviousPage(false);   
  11.         pvb.setPageStartRow(0);   
  12.         if (total % pagesize == 0) {   
  13.             pvb.setTotalPages(total / pagesize);   
  14.         } else {   
  15.             pvb.setTotalPages((total / pagesize) + 1);   
  16.         }   
  17.         if (pvb.getTotalPages() > 1) {   
  18.             pvb.setNextPage(2);   
  19.             pvb.setHasNextPage(true);   
  20.         } else {   
  21.             pvb.setHasNextPage(false);   
  22.         }   
  23.         if (pvb.getTotalPages() > 10) {   
  24.             pvb.setHasNextNextPage(true);   
  25.             pvb.setNextNextPage(11);   
  26.         } else {   
  27.             pvb.setHasNextNextPage(false);   
  28.         }   
  29.         pvb.getPages().removeAll(pvb.getPages());   
  30.         // 移除列表里面的所有对象   
  31.         for (int i = 1; i <= pvb.getTotalPages() && i <= 10; i++) {   
  32.             Integer temp = new Integer(i);   
  33.             pvb.getPages().add(temp);   
  34.         }   
  35.         return pvb;   
  36.     }   
  37.   
  38.     public PageBean gotoPage(int pagesize, int pageNo) {   
  39.         pvb.setPageSize(pagesize);   
  40.         pvb.setCurrentPage(pageNo);   
  41.         if (pageNo <= 6) { // 当从用户输入框里面输入的数字小于6的时候   
  42.             pvb = pagebean(pvb.getTotalRows(), pvb.getPageSize());   
  43.              pvb.setCurrentPage(pageNo);   
  44.         } else if (pageNo > 6 && pageNo <= pvb.getTotalPages()) {//当输入大于6且小于总页数的时候   
  45.             int tr=pageNo;   
  46.             pvb.getPages().removeAll(pvb.getPages());   
  47.             if(pvb.getTotalPages()>6&&pvb.getTotalPages()<=10){   
  48.                 for(int i=1;i<=pvb.getTotalPages();i++){   
  49.                     Integer t=new Integer(i);   
  50.                     pvb.getPages().add(t);   
  51.             }}   
  52.             else{   
  53.                 for(int i=tr-5;i<=tr+4&&i<=pvb.getTotalPages();i++){   
  54.                
  55.                 Integer t=new Integer(i);   
  56.                 pvb.getPages().add(t);   
  57.             }   
  58.             }   
  59.     
  60. //            //int num = 0; // pageNo十位上的数字   
  61. //           // num = pageNo / 10;   
  62. //            //if (pvb.getTotalPages() > (num + 1) * 10) {   
  63. //                // 当页的总数大于这个区间的数字时   
  64. //                Integer tr = new Integer(num * 10+1);   
  65. //                pvb.getPages().removeAll(pvb.getPages());   
  66. //                pvb.getPages().add(tr);   
  67. //                for (int i = 2; i <=10; i++) {   
  68. //                    Integer t = new Integer(num * 10 + i);   
  69. //                    pvb.getPages().add(t);   
  70. //                }   
  71. //            } else {   
  72. //                Integer tr = new Integer(num * 10+1);   
  73. //                pvb.getPages().removeAll(pvb.getPages());   
  74. //                pvb.getPages().add(tr);   
  75. //                for (int i = 2; i < pvb.getTotalPages() - (num * 10) + 1; i++) {   
  76. //                    Integer t = new Integer(num * 10 + i);   
  77. //                    pvb.getPages().add(t);   
  78. //                }   
  79. //            }   
  80.              pvb.setCurrentPage(pageNo);   
  81.         } else {   
  82.             //当输入的页数大于总页数的时候   
  83.           int num=0//得到总页数的十位数字   
  84.           num=pvb.getTotalPages()/10;   
  85.           pvb.getPages().removeAll(pvb.getPages());   
  86.           for(int i=num*10+1;i<pvb.getTotalPages()+1;i++){   
  87.               Integer t = new Integer(i);   
  88.                 pvb.getPages().add(t);   
  89.           }   
  90.           pvb.setCurrentPage(pvb.getTotalPages());   
  91.         }   
  92.         if(pageNo+1<=pvb.getTotalPages()){   
  93.             pvb.setNextPage(pageNo+1);   
  94.             pvb.setHasNextPage(true);   
  95.         }else{   
  96.             pvb.setHasNextNextPage(false);   
  97.             pvb.setNextPage(0);   
  98.         }   
  99.         if(pageNo+10<=pvb.getTotalPages()){   
  100.             pvb.setNextNextPage(pageNo+10);   
  101.             pvb.setHasNextNextPage(true);   
  102.         }else{   
  103.             pvb.setHasNextNextPage(false);   
  104.             pvb.setNextNextPage(0);   
  105.         }   
  106.         if(pageNo-10>=1){   
  107.             pvb.setPerviousPerviousPage(pageNo-10);   
  108.             pvb.setHasPreviousPreviousPage(true);   
  109.         }else{   
  110.             pvb.setHasPreviousPreviousPage(false);   
  111.             pvb.setPerviousPerviousPage(0);   
  112.         }   
  113.         if(pageNo-1>=1){   
  114.             pvb.setPerviousPage(pageNo-1);   
  115.             pvb.setHasPreviousPage(true);   
  116.         }else{   
  117.             pvb.setHasPreviousPage(false);   
  118.             pvb.setPerviousPerviousPage(0);   
  119.         }   
  120.         pvb.setPageStartRow((pvb.getCurrentPage() - 1) * pvb.getPageSize());   
  121.            
  122.         return pvb;   
  123.     }   
  124.   
  125.        
  126. }  


有些方法可能没用到。所以我注释掉了。
这个优化完应该算是一个功能比较全的分页了。。
posted @ 2009-01-09 21:06  猪鼻驴耳  阅读(112)  评论(0)    收藏  举报