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

本文分享了仿JavaEye分页功能的实现思路与代码。针对不同总页数的情况,展示了如何动态生成分页导航,并提供了完整的Page类及Action类示例。

从学会基本的分页后,我一直都想实现类仿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

【电动汽车充电站有序充电调度的散式优化】基于蒙特卡诺和拉格朗日的电动汽车优化调度(时电价调度)(Matlab代码实现)内容概要:本文介绍了基于蒙特卡洛和拉格朗日方法的电动汽车充电站有序充电调度优化方案,重点在于采用散式优化策略应对时电价机制下的充电需求管理。通过构建数学模型,结合不确定性因素如用户充电行为和电网负荷波动,利用蒙特卡洛模拟生成大量场景,并运用拉格朗日松弛法对复杂问题进行解求解,从而实现全局最优或近似最优的充电调度计划。该方法有效降低了电网峰值负荷压力,提升了充电站运营效率与经济效益,同时兼顾用户充电便利性。 适合人群:具备一定电力系统、优化算法和Matlab编程基础的高校研究生、科研人员及从事智能电网、电动汽车相关领域的工程技术人员。 使用场景及目标:①应用于电动汽车充电站的日常运营管理,优化充电负荷布;②服务于城市智能交通系统规划,提升电网与交通系统的协同水平;③作为学术研究案例,用于验证散式优化算法在复杂能源系统中的有效性。 阅读建议:建议读者结合Matlab代码实现部,深入理解蒙特卡洛模拟与拉格朗日松弛法的具体实施步骤,重点关注场景生成、约束处理与迭代收敛过程,以便在实际项目中灵活应用与改进。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值