仿JavaEye里的分页码而做的练习

从学会基本的分页后,我一直都想实现类仿JavaEye里的分页码功能,终于不负我多日地寻找资料和思考,完成了这个功能。以下我分享我的思路。

  1、首先进行测试:

 (1)、

 

总页数(totalPages)  1-6   (totalPages=6)

当前页号(currentPage)

结果

1

1 2 3 4 5 6

 

 

总页数(totalPages)  7-10   (totalPages=9)

当前页号(currentPage)

结果

1

1 2 3 …8 9

>=2

1 2 3 4 5 6 7 8 9

 

 

 

总页数(totalPages)  >=11   (totalPages=50)

 

当前页号(currentPage)

 

结果

 1 

1 2 …49 50

 2 

1 2 3…49 50

 3 

1 2 3 4…49 50

 4 

1 2 3 4 5…49 50

 5 

1 2 3 4 5 6…49 50

6 

1 2 3 … 5 6 7…49 50

7 

1 2 3 …6 7 8…49 50

44 

1 2 3 …43 44 45…49 50

45 

1 2 3 …44 45 46…49 50

46 

1 2 3 …45 46 47 48 49 50

 

47

 

1 2 3 …46 47 48 49 50

 

48

 

1 2 3 …47 48 49 50

 

49-50

 

1 2 3 …48 49 50

 (2)、实现:

package nn.bbs.common;

public class OldThepagema {
	private int pageSize=10;  //每页显示的行数
	private int currentPage=44; //当前页号
	private int totalRows=500; //总行数
	
	
    public String showPagema() {
    	StringBuffer strBuf = new StringBuffer(400);
    	
    	int totalPages=totalRows/pageSize;//总页数
        int mod=totalRows%pageSize;
        if(mod>0){
        	totalPages++;
        }             
        if(currentPage<=0)    currentPage =1;
        if(currentPage>totalPages) currentPage=totalPages;
        
        if(totalPages<=6){
        	for(int i=1;i<=totalPages;i++){
        		strBuf.append(i+" ");
        	}
        }
        else{
        	if(totalPages<=10&&totalPages>6){
        		if(currentPage==1){
        			strBuf.append("1 "+"2 "+"3 "+"..."+(totalPages-1)+" "+totalPages);
        			      			  
        		}
        		else{
        			for(int i=1;i<=totalPages;i++){
                		strBuf.append(i+" ");
                	} 
        		}
        	}
        	else{
        		if(currentPage<6){
        			for(int i=1;i<=currentPage+1;i++){
                		
        				strBuf.append(i+" ");
                	} 
        			strBuf.append("..."+(totalPages-1)+" "+totalPages);
        		}
        		else{
        			if(currentPage<=(totalPages-5)){
        				strBuf.append("1 "+"2 "+"3 "+"..."+(currentPage-1)+" "+currentPage+" "+(currentPage+1)+"..."+(totalPages-1)+" "+totalPages);
        			}
        			else{
        				if(currentPage==totalPages||currentPage==(totalPages-1)){
        					strBuf.append("1 "+"2 "+"3 "+"..."+(totalPages-2)+" "+(totalPages-1)+" "+totalPages);
        				}
        				if(currentPage==(totalPages-2)){
        					strBuf.append("1 "+"2 "+"3 "+"..."+(totalPages-3)+" "+(totalPages-2)+" "+(totalPages-1)+" "+totalPages);
        				}
        				if(currentPage==(totalPages-3)){
        					strBuf.append("1 "+"2 "+"3 "+"..."+(totalPages-4)+" "+(totalPages-3)+" "+(totalPages-2)+" "+(totalPages-1)+" "+totalPages);
        				}
        				if(currentPage==(totalPages-4)){
        					strBuf.append("1 "+"2 "+"3 "+"..."+(totalPages-5)+" "+(totalPages-4)+" "+(totalPages-3)+" "+(totalPages-2)+" "+(totalPages-1)+" "+totalPages);
        				}
        			}
        		}
        		
        	}
        }
    	return strBuf.toString();
    }
	/**
	 * @param args
	 */
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		OldThepagema pagema=new OldThepagema();		
		System.out.println(pagema.showPagema());
	}


	public int getCurrentPage() {
		return currentPage;
	}


	public void setCurrentPage(int currentPage) {
		this.currentPage = currentPage;
	}


	public int getPageSize() {
		return pageSize;
	}


	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}


	public int getTotalRows() {
		return totalRows;
	}
	public void setTotalRows(int totalRows) {
		this.totalRows = totalRows;
	}

}

 

2、具体操作

 (1)、Page.java

package nn.bbs.common;


public class Page{

    private int totalRows; //总行数
    private int pageSize;  //每页显示的行数
    private int currentPage=1; //当前页号
    private int totalPages; //总页数
    private int startRow=0;  //当前页在数据库中的起始行0,pageSize,pageSize*2,pageSize*3...
    
    private String PREVIOUS_PAGE = "&laquo; 上一页";
    private String NEXT_PAGE = "下一页 &raquo;";

	
    
   

	public String getHref(int number) {
    	String s="towidget.action?page.currentPage="+number+"&amp;page.pageSize="+pageSize;
    	return s;
    }

    public String goHref(int number) {
    	return "<a href=\"" + getHref(number) + "\">" + number + "</a>";
    }
    
    
    
    public Page() {
    }
    
    public Page(int totalRows,int _pageSize) {
    	this.totalRows =totalRows;
        this.pageSize=_pageSize;
    	totalPages=totalRows/pageSize;
        int mod=totalRows%pageSize;
        if(mod>0){
        	totalPages++;
        }
        currentPage = 1;
        startRow = 0;
        }

    public Page(int totalRows,int currentPage,int _pageSize) {
    	this.totalRows =totalRows;
    	this.pageSize=_pageSize;
        totalPages=totalRows/pageSize;
        int mod=totalRows%pageSize;
        if(mod>0){
        	totalPages++;
        }             
        if(currentPage<=0)    currentPage =1;
        if(currentPage>totalPages) currentPage=totalPages;
        this.currentPage =currentPage;
        startRow = (currentPage - 1)*pageSize;
        }
    
//显示分页码
    public String showPagema() {
    	StringBuffer strBuf = new StringBuffer(400);
    	    	                     
        
        strBuf.append("<div class=\"pagination\">");
  //显示上一页
        if (currentPage > 1) {
         strBuf.append("<a href=\"" + getHref(currentPage - 1)
           + "\" class=\"prev_page\" rel=\"prev start\">"
           + PREVIOUS_PAGE + "</a>");
        } else {
         strBuf.append("<span class=\"disabled prev_page\">" + PREVIOUS_PAGE
           + "</span>");
        }
        
        
        if(totalPages<=6){       	
        	for(int i=1;i<=totalPages;i++){
        		if (i == currentPage) {        			
        		     strBuf.append("<span class=\"current\">" + i + "</span>");
        		    }
        		else {
        		     strBuf.append(goHref(i));
        		    }
        		//strBuf.append(i+" ");
        	}
        }
        else{
        	if(totalPages<=10&&totalPages>6){
        		if(currentPage==1){       			
        			strBuf.append("<span class=\"current\">" + currentPage + "</span>");
        			strBuf.append(goHref(1));
        			strBuf.append(goHref(2));
        			strBuf.append(goHref(3));
        			strBuf.append("<span class=\"gap\">&hellip;</span>");
        		    strBuf.append(goHref(totalPages - 1));
        		    strBuf.append(goHref(totalPages));
        			//strBuf.append("1 "+"2 "+"3 "+"..."+(totalPages-1)+" "+totalPages);
        			      			  
        		}
        		else{
        			for(int i=1;i<=totalPages;i++){
        				if (i == currentPage) {
               		     strBuf.append("<span class=\"current\">" + i + "</span>");
               		    }
               		    else {
               		    	strBuf.append(goHref(i));
               		    }
        				//strBuf.append(i+" ");
                	} 
        		}
        	}
        	else{
        		if(currentPage<6){
        			for(int i=1;i<=currentPage+1;i++){
        				if (i == currentPage) {
                  		     strBuf.append("<span class=\"current\">" + i + "</span>");
                  		}
                  		else {
                  			strBuf.append(goHref(i));
                  		}
        				//strBuf.append(i+" ");
                	} 
        			strBuf.append("<span class=\"gap\">&hellip;</span>");
        		    strBuf.append(goHref(totalPages - 1));
        		    strBuf.append(goHref(totalPages));
        			//strBuf.append("..."+(totalPages-1)+" "+totalPages);
        		}
        		else{
        			if(currentPage<=(totalPages-5)){
        				
        				strBuf.append(goHref(1));
            			strBuf.append(goHref(2));
            			strBuf.append(goHref(3));
            			strBuf.append("<span class=\"gap\">&hellip;</span>");
            		    strBuf.append(goHref(currentPage - 1));
            		    strBuf.append("<span class=\"current\">" + currentPage + "</span>");
            		    strBuf.append(goHref(currentPage + 1));
            			strBuf.append("<span class=\"gap\">&hellip;</span>");
            		    strBuf.append(goHref(totalPages - 1));
            		    strBuf.append(goHref(totalPages));
        				//strBuf.append("1 "+"2 "+"..."+(currentPage-1)+" "+currentPage+" "+(currentPage+1)+"..."+(totalPages-1)+" "+totalPages);
        			}
        			else{
        				if(currentPage==totalPages||currentPage==(totalPages-1)){        					
        					strBuf.append(goHref(1));
                			strBuf.append(goHref(2));
                			strBuf.append(goHref(3));
                			strBuf.append("<span class=\"gap\">&hellip;</span>");
                			strBuf.append(goHref(totalPages - 2));
                			if(currentPage==totalPages){
                				strBuf.append(goHref(totalPages -1));
                				strBuf.append("<span class=\"current\">" + currentPage + "</span>");
                			}
                			else{
                				strBuf.append("<span class=\"current\">" + currentPage + "</span>");
                				strBuf.append(goHref(totalPages));
                			}
        					//strBuf.append("1 "+"2 "+"..."+(totalPages-2)+" "+(totalPages-1)+" "+totalPages);
        					
        				}
        				if(currentPage==(totalPages-2)){
        					strBuf.append(goHref(1));
                			strBuf.append(goHref(2));
                			strBuf.append(goHref(3));
                			strBuf.append("<span class=\"gap\">&hellip;</span>");
                			strBuf.append(goHref(totalPages - 3));
                			strBuf.append("<span class=\"current\">" + currentPage + "</span>");
                			//strBuf.append(goHref(totalPages - 2));
                			strBuf.append(goHref(totalPages - 1));
                		    strBuf.append(goHref(totalPages));
        					//strBuf.append("1 "+"2 "+"..."+(totalPages-3)+" "+(totalPages-2)+" "+(totalPages-1)+" "+totalPages);
        				}
        				if(currentPage==(totalPages-3)){
        					strBuf.append(goHref(1));
                			strBuf.append(goHref(2));
                			strBuf.append(goHref(3));
                			strBuf.append("<span class=\"gap\">&hellip;</span>");
                			strBuf.append(goHref(totalPages - 4));
                			strBuf.append("<span class=\"current\">" + currentPage + "</span>");
                			//strBuf.append(goHref(totalPages - 3));
                			strBuf.append(goHref(totalPages - 2));
                			strBuf.append(goHref(totalPages - 1));
                		    strBuf.append(goHref(totalPages));
        					//strBuf.append("1 "+"2 "+"..."+(totalPages-4)+" "+(totalPages-3)+" "+(totalPages-2)+" "+(totalPages-1)+" "+totalPages);
        				}
        				if(currentPage==(totalPages-4)){
        					strBuf.append(goHref(1));
                			strBuf.append(goHref(2));
                			strBuf.append(goHref(3));
                			strBuf.append("<span class=\"gap\">&hellip;</span>");
                			strBuf.append(goHref(totalPages - 5));
                			strBuf.append("<span class=\"current\">" + currentPage + "</span>");
                			//strBuf.append(goHref(totalPages - 4));
                			strBuf.append(goHref(totalPages - 3));
                			strBuf.append(goHref(totalPages - 2));
                			strBuf.append(goHref(totalPages - 1));
                		    strBuf.append(goHref(totalPages));
        					//strBuf.append("1 "+"2 "+"..."+(totalPages-5)+" "+(totalPages-4)+" "+(totalPages-3)+" "+(totalPages-2)+" "+(totalPages-1)+" "+totalPages);
        				}
        			}
        		}
        		
        	}
        }
        
    	
//显示下-页
        if (currentPage != totalPages&&totalPages!=0) {
              strBuf.append("<a href=\"" + getHref(currentPage + 1)+ "\" class=\"next_page\" rel=\"next\">" + NEXT_PAGE+ "</a>");
        } else {
           strBuf.append("<span class=\"disabled next_page\">" + NEXT_PAGE+ "</span>");
        }
        
        strBuf.append("</div>");
    	return strBuf.toString();
    }
    
    
    /*
     * get set
     */
    
    
  //总行数
    public void setTotalRows(int totalRows) {
        this.totalRows = totalRows;
    } 
    public int getTotalRows() {
       return totalRows;
    }
  //每页显示的行数
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
   }
    public int getPageSize() {
        return pageSize;
    }
  //当前页号
    public void setCurrentPage(int currentPage) {
        this.currentPage = currentPage;
   } 
    public int getCurrentPage() {
        return currentPage;
    }

  //总页数
    public void setTotalPages(int totalPages) {
        this.totalPages = totalPages;
    }
   
    public int getTotalPages() {
        return totalPages;
    }
  //当前页在数据库中的起始行
    public void setStartRow(int startRow) {
        this.startRow = startRow;
    }
        
    public int getStartRow() {
    	return startRow;
    }
    
}

 

(2)、UserAction.java

private Page page;
private String pagema;

 

//显示初始用户列表
	public String getuserlist() throws Exception {		
		ActionContext ctx = ActionContext.getContext(); 
        Map m=ctx.getSession();   
		m.put("search_keyword",null);
		m.put("search_cat",null);	
		String hql_1="select u.id,u.name,u.password,u.sex,u.email,u.question,u.answer,u.regdate,s.shiname ";
		String hql_2="from User as u left join u.shi as s";//u.shi多对一的关系,不是nn.bbs.vo.Shi,不必写where u.shi.shiid=s.shiid		
		String hql_3="  order by u.regdate desc";
		String hql_4=hql_1+hql_2+hql_3;	
		//String hql_3=hql_1+"from User as u,Shi as s where u.shi.shiid=s.shiid";
		String hql_5="select count(*) "+hql_2;						
		
		page=userService.getuserlist(hql_5,20);//默认一页显示20条数据
		userList=new ArrayList();
		userList=userService.getTheUserList(page.getPageSize(),page.getStartRow(),hql_4);
		m.put("gettheexcel",userList);//为了导出数据
		pagema=page.showPagema();//显示分页码
		return SUCCESS;
	}

 

(3)、userlist.html

<link href="css/page.css" type=text/css rel=stylesheet>

 

${pagema?if_exists}

 

 (4)、

.pagination {
	PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FLOAT: right; PADDING-BOTTOM: 5px; PADDING-TOP: 5px
}
.pagination A {
	BORDER-RIGHT: #aaaadd 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #aaaadd 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #aaaadd 1px solid; COLOR: #006699; PADDING-TOP: 2px; BORDER-BOTTOM: #aaaadd 1px solid; TEXT-DECORATION: none
}
.pagination A:link {
	BORDER-RIGHT: #aaaadd 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #aaaadd 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #aaaadd 1px solid; COLOR: #006699; PADDING-TOP: 2px; BORDER-BOTTOM: #aaaadd 1px solid; TEXT-DECORATION: none
}
.pagination A:visited {
	BORDER-RIGHT: #aaaadd 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #aaaadd 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #aaaadd 1px solid; COLOR: #006699; PADDING-TOP: 2px; BORDER-BOTTOM: #aaaadd 1px solid; TEXT-DECORATION: none
}
.pagination A:hover {
	BORDER-RIGHT: #006699 1px solid; BORDER-TOP: #006699 1px solid; BORDER-LEFT: #006699 1px solid; COLOR: #000; BORDER-BOTTOM: #006699 1px solid; TEXT-DECORATION: none
}
.pagination A:active {
	BORDER-RIGHT: #006699 1px solid; BORDER-TOP: #006699 1px solid; BORDER-LEFT: #006699 1px solid; COLOR: #000; BORDER-BOTTOM: #006699 1px solid; TEXT-DECORATION: none
}
.pagination SPAN.current {
	BORDER-RIGHT: #006699 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #006699 1px solid; PADDING-LEFT: 5px; FONT-WEIGHT: bold; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #006699 1px solid; COLOR: #fff; PADDING-TOP: 2px; BORDER-BOTTOM: #006699 1px solid; BACKGROUND-COLOR: #006699
}
.pagination SPAN.disabled {
	BORDER-RIGHT: #eee 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #eee 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #eee 1px solid; COLOR: #ddd; PADDING-TOP: 2px; BORDER-BOTTOM: #eee 1px solid
}

 

 具体代码下载ssb_bbs.rar

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值