Java代码分页展示(知识点满满)

原因:像分页这种功能其实随处可见,虽然现在有了很多的工具类,但是ssm框架或者更早的框架也会有手敲的现象。
废话少说 上干货!!!

一:分页实体类

/**
 * 分页实体类
 * @category 使用前需按如下顺序设置属性<br/>
 * pageBean.setPageNo(page);<br/>
 * pageBean.setTotalRecords(count);<br/>
 * pageBean.setPerPage(10);<br/> 
 * @author wgs
 */
public class PageBean {
	private int totalRecords;	//总记录数
	private int totalPages;		//总页数
	private int perPage;		//每页的条数
	private int pageNo;			//当前页号
	private int prevPage;		//前页页号
	private int nextPage;		//后页页号
	private boolean hasPrev;	//是否有前页
	private boolean hasNext;	//是否有后页
	private String url;			//翻页提交的Action地址

	/**
	 * 获取下一页页号
	 * @return 下一页页号
	 */
	public int getNextPage() {
		return nextPage;
	}
	/**
	 * 设置下一页页号
	 * @param nextPage - 下一页页号
	 */
	public void setNextPage(int nextPage) {
		this.nextPage = nextPage;
	}
	
	/**
	 * 获取每页的条数
	 * @return 每页的条数
	 */
	public int getPerPage() {
		return perPage;
	}
	/**
	 * 设置每页的条数<br />
	 * 设置每页的条数时,同时再根据总记录数(totalRecords)自动计算总页数
	 * @param perPage - 每页的条数
	 */
	public void setPerPage(int perPage) {
		this.perPage = perPage;
                if(totalRecords==0)
                    this.totalPages=0;
		else
                    this.totalPages=(totalRecords-1)/perPage + 1;
	}
	/**
	 * 获取当前页号
	 * @return 前页号
	 */
	public int getPageNo() {
		return pageNo;
	}
	/**
	 * 设置当前页号<br/>
	 * 设置当前页号时,根据总页数自动计算出上一页和下一页的页号。
	 * @param pageNo - 当前页号
	 */
	public void setPageNo(int pageNo) {
		if(pageNo<1) pageNo=1;
		if(pageNo>totalPages) pageNo=totalPages;
		this.pageNo = pageNo;
		if(pageNo>1){
			this.prevPage=pageNo-1;
			this.hasPrev=true;
		}else{
			this.prevPage=1;
			this.hasPrev=false;
		}
		if(pageNo<totalPages){
			this.nextPage=pageNo+1;
			this.hasNext=true;
		}else{
			this.nextPage=totalPages;
			this.hasNext=false;
		}
		this.nextPage=pageNo+1;
	}
	/**
	 * 获取上一页页号
	 * @return 上一页页号
	 */
	public int getPrevPage() {
		return prevPage;
	}
	/**
	 * 设置上一页页号
	 * @param prevPage - 上一页页号
	 */
	public void setPrevPage(int prevPage) {
		this.prevPage = prevPage;
	}
	
	/**
	 * 获取总页数
	 * @return 总页数
	 */
	public int getTotalPages() {
		return totalPages;
	}
	/**
	 * 设置总页数
	 * @param totalPages - 总页数
	 */
	public void setTotalPages(int totalPages) {
		this.totalPages = totalPages;
	}
	
	/**
	 * 获取总记录数
	 * @return 总记录数
	 */
	public int getTotalRecords() {
		return totalRecords;
	}
	/**
	 * 设置总记录数<br/>
	 * 设置总记录数时,根据总记录数和每页记录数自动计算总页数。
	 * @param totalRecords - 总记录数
	 */
	public void setTotalRecords(int totalRecords) {
		this.totalRecords = totalRecords;
		if(totalRecords==0)
			this.totalPages=0;
		else
			this.totalPages=(totalRecords-1)/perPage + 1;
	}
	
	/**
	 * 判断是否还有下一页
	 * @return true-有;false-没有。
	 */
	public boolean isHasNext() {
		return hasNext;
	}
	/**
	 * 设置是否还有下一页
	 * @param hasNext - 是否还有下一页
	 */
	public void setHasNext(boolean hasNext) {
		this.hasNext = hasNext;
	}
	
	/**
	 * 判断是否还有上一页
	 * @return true-有;false-没有。
	 */
	public boolean isHasPrev() {
		return hasPrev;
	}
	/**
	 * 设置是否还有上一页
	 * @param hasPrev - 是否还有上一页
	 */
	public void setHasPrev(boolean hasPrev) {
		this.hasPrev = hasPrev;
	}
	
	/**
	 * 获取URL地址
	 * @return URL地址
	 */
	public String getUrl() {
		return url;
	}
	/**
	 * 设置URL地址
	 * @param url - URL地址
	 */
	public void setUrl(String url) {
		this.url = url;
	}

}

二:分页的controller

/**
     * controller
     * 
     */
    @RequestMapping(value = "test")
    public void test(HttpServletRequest request,@RequestParam Integer rows, @RequestParam Integer page){
    	
    	Integer count =0;
    	

    	PageBean pageBean = new PageBean();
    
    	try{
    		count = "总条数";
    		
        	if((rows == null) || (rows.intValue() <= 10)){
        		rows = Integer.valueOf(10);
        	}
        	//设置分页信息
    		pageBean.setPerPage(rows);
    		pageBean.setTotalRecords(count);
    		if (page > pageBean.getTotalPages() && pageBean.getTotalPages() != 0) {
    			page = pageBean.getTotalPages();
    		}
    		pageBean.setPageNo(page);
    		
    		
    		// 分页开始条数
        	Integer first = (page - 1) * pageBean.getPerPage();
        	
        	if (first != 0) {
    	    	if (first >= count) {
    	    		page--;
    	    		pageBean.setPageNo(page);
    	    		first = (page-1) * pageBean.getPerPage();
    	    	}
        	}        	

         
            //获取展示的分页信息
           arr = query( first, rows);
             model.addAttribute("total", Long.valueOf(count));
           

    	}catch(Exception e){
    		//logger.error("UserController viewUsers Exception:"+e.getMessage());
    		throw new Exception(e.getMessage());
    	}
    	
    

新手看不懂的可以私我讨论,不足之处多多指出!个人纯属当做笔记

显示效果: [页面总数小于等于10,全部显示,当前页特殊显示] 上一页 1 2 3 4 5 6 7 8 9 10 下一页 [页面总数大于10,部分显示,当前页特殊显示] 上一页 1 2 3 … 20 下一页 [当前页面为首页时,上一页不可用] 上一页 1 2 3 4 … 20 下一页 上一页 1 2 3 4 5 … 20 下一页 上一页 1 2 3 4 5 6 … 20 下一页 上一页 1 … 3 4 5 6 7 … 20 下一页 上一页 1 … 14 15 16 17 18 ... 20 下一页 上一页 1 … 15 16 17 18 19 20 下一页 上一页 1 … 16 17 18 19 20 下一页 上一页 1 … 17 18 19 20 下一页 上一页 1 … 18 19 20 下一页[当前页面为末页时,下一页不可用] 算法提取: 0.页码显示规则: 当前页为首页时不显示上一页; 上一页 1 2 3 … 20 下一页 当前页为尾页时不显示下一页; 上一页 1 … 17 18 19 20 下一页 1.页面总数(n)<=10 { 显示全部页码:上一页 1 2 3 4 5 6 7 8 9 10 下一页 } 2.页面总数(n) > 10 { 2.1 当前页码 <= 4 { 左侧显示所有 + 当前页码 + 右侧2个页码 + ... + 尾页 上一页 1 2 3 … 20 下一页 上一页 1 2 3 4 … 20 下一页 上一页 1 2 3 4 5 … 20 下一页 上一页 1 2 3 4 5 6 … 20 下一页 } 2.2 当前页码 > 4 且<= 页面总数(n) - 3 { 首页 + ... + 左侧2个页码 + 当前页码 + 右侧2个页码 + ... + 尾页 上一页 1 … 3 4 5 6 7 … 20 下一页 上一页 1 … 14 15 16 17 18 ... 20 下一页 } 2.3 当前页码 > 页面总数(n) - 3 { 首页 + ... + 左侧2个页面 + 当前页码 + 右侧显示所有 上一页 1 … 15 16 17 18 19 20 下一页 上一页 1 … 16 17 18 19 20 下一页 上一页 1 … 17 18 19 20 下一页 上一页 1 … 18 19 20 下一页 } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值