自己优化的struts分页

前几天突然想到优化一个分页,结果做了大半天,觉得还不错,分享一下。
这是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;
    }

    
}



有些方法可能没用到。所以我注释掉了。
这个优化完应该算是一个功能比较全的分页了。。

你可能感兴趣的:(Hibernate,算法,struts,百度,ext)