分页封装

分页封装
<pre name="code" class="java">import java.util.ArrayList;
import java.util.List;

/**
 * 分页对象,表示一页数据和上下文信息
 *
 *
 */
public class Page<T> {

    private static int DEFAULT_PAGE_SIZE = 15;

    private static int DEFAULT_PAGE_NO = 1;

    /**
     * 第几页
     */
    private int pageNo = DEFAULT_PAGE_NO;

    /**
     * 每页显示对象个数
     */
    private int pageSize = DEFAULT_PAGE_SIZE;

    /**
     * 对象总数量
     */
    private int totalCount;

    /**
     * 每页的数据列表
     */
    private List<T> result = new ArrayList<T>();

    public Page(int pageNo, int pageSize) {
        this.setPageNo(pageNo);
        this.setPageSize(pageSize);
    }

    public Page(int pageNo) {
        this.setPageNo(pageNo);
        this.pageSize = DEFAULT_PAGE_SIZE;
    }

    public Page() {
        this.pageNo = DEFAULT_PAGE_NO;
        this.pageSize = DEFAULT_PAGE_SIZE;
    }

    // 每页的第一条记录在结果集中的位置
    public int getPageFirst() {
        return ((pageNo - 1) * pageSize);
    }

    // 总页数,这个是根据totalcount和pageSize计算的
    public int getTotalPages() {
        if (totalCount == 0)
            return 0;

        int count = totalCount / pageSize;
        if (totalCount % pageSize > 0) {
            count++;
        }
        return count;
    }

    /**
     * 是否还有下一页.
     */
    public boolean isHasNext() {
        return (pageNo + 1 <= getTotalPages());
    }

    /**
     * 返回下页的页号,序号从1开始.
     */
    public int getNextPage() {
        if (isHasNext())
            return pageNo + 1;
        else
            return pageNo;
    }

    /**
     * 是否还有上一页.
     */
    public boolean isHasPre() {
        return (pageNo - 1 >= 1);
    }

    /**
     * 返回上页的页号,序号从1开始.
     */
    public int getPrePage() {
        if (isHasPre())
            return pageNo - 1;
        else
            return pageNo;
    }

    /**
     * @return the pageNo
     */
    public int getPageNo() {
        return pageNo;
    }

    /**
     * @param pageNo the pageNo to set
     */
    public void setPageNo(int pageNo) {
        if (pageNo > 0) {
            this.pageNo = pageNo;
        }
    }

    /**
     * @return the pageSize
     */
    public int getPageSize() {
        return pageSize;
    }

    //和getPageSize一样
    public int getLimit() {
        return pageSize;
    }

    /**
     * @param pageSize the pageSize to set
     */
    public void setPageSize(int pageSize) {
        if (pageSize > 0) {
            this.pageSize = pageSize;
        }
    }

    /**
     * @return the totalCount
     */
    public int getTotalCount() {
        return totalCount;
    }

    /**
     * @param totalCount the totalCount to set
     */
    public void setTotalCount(int totalCount) {
        this.totalCount = totalCount;
    }

    /**
     * @return the result
     */
    public List<T> getResult() {
        return result;
    }

    /**
     * @param result the result to set
     */
    public void setResult(List<T> result) {
        this.result = result;
    }

}

应用示例:

public Page<ReportDemand> getReportDemandPage(QueryParam param,int pageNo, int pageSize){
		
		Page<ReportDemand> page = new Page<ReportDemand>();
		page.setPageSize(pageSize);
		page.setTotalCount(reportDemandMapper.getReportDemandCount(param));
		if(pageNo > page.getTotalPages() || page.getTotalCount() == 0){
			return new Page<ReportDemand>(pageNo, pageSize);
		}
		page.setPageNo(pageNo);
		param.setStart(page.getPageFirst());
		param.setLimit(page.getLimit());
		List<ReportDemand> list = reportDemandMapper.getReportDemandPage(param);
		page.setResult(list);
		return page;
	}

@Action( value = "page",results = {@Result(name = "success", type = "dispatcher", location = "../report_list.jsp")})
	public String reportPage(){
		HttpServletResponse response = ServletActionContext.getResponse();
        HttpServletRequest request = ServletActionContext.getRequest();
        response.setContentType("text/html;charset=UTF-8");
        int pageNo = RequestUtil.getInt(request, "pageNo", 1);
        int pageSize = RequestUtil.getInt(request, "pageSize", 15);
        String url = "?pageSize=" + pageSize;
        QueryParam param = getQueryParam(request);
        Page<ReportDemand> page = reportDemandService.getReportDemandPage(param, pageNo, pageSize);
        request.setAttribute("param", url + param.getUrl());
        if (page.getTotalCount() > 0) {
            request.setAttribute("pageBar", PageProcessor.process(page));
            request.setAttribute("page", page);
        }
		return SUCCESS;
	}

	private QueryParam getQueryParam(HttpServletRequest request) {
		 UserInfo user = ContextUtil.getCurrentUser();
	        StringBuilder str = new StringBuilder("");
	        
	        int dcId = RequestUtil.getInt(request, "dcId", 0);
	        if (dcId > 0) {
	            str.append("&dcId=").append(dcId);
	            request.setAttribute("dcId", dcId);
	        }
	        String keyWord = RequestUtil.getString(request, "keyWord");
	        if (StringUtils.isNotBlank(keyWord)) {
	            str.append("&keyWord=").append(keyWord);
	            request.setAttribute("keyWord", keyWord);
	        }

	        String submitterAccount = RequestUtil.getString(request, "submitterAccount");
	        if (StringUtils.isNotBlank(submitterAccount)) {
	            str.append("&submitterAccount=").append(submitterAccount);
	        }
	        String applicantAccount = RequestUtil.getString(request, "applicantAccount");
	        if (StringUtils.isNotBlank(applicantAccount)) {
	            str.append("&applicantAccount=").append(applicantAccount);
	        }
	        String accepterAccount = RequestUtil.getString(request, "accepterAccount");
	        if (StringUtils.isNotBlank(accepterAccount)) {
	            str.append("&accepterAccount=").append(accepterAccount);
	        }
	        String status = RequestUtil.getString(request, "status");
	        if (StringUtils.isNotBlank(status)) {
	            str.append("&status=").append(status);
	            request.setAttribute("status", status);
	        }
	        
	        Boolean commented = RequestUtil.getBoolean(request, "commented");
	        if (null != commented) {
	            str.append("&commented=").append(commented);
	            request.setAttribute("commented", commented);
	        }

	        Boolean current = RequestUtil.getBoolean(request, "current", false);
	        if (current) {
	            request.setAttribute("current", true);
	            str.append("¤t=").append(true);
	        }

	        String userType = RequestUtil.getString(request, "ut");
	        if (StringUtils.isNotBlank(userType) && userType.equals("submit")) {
	            request.setAttribute("ut", "submit");
	            submitterAccount = current ? user.getAccount() : "";
	            str.append("&ut=").append("submit");
	        } else if (StringUtils.isNotBlank(userType) && userType.equals("accept")) {
	            request.setAttribute("ut", "accept");
	            accepterAccount = current ? user.getAccount() : "";
	            str.append("&ut=").append("accept");
	        }


	        QueryParam param = new QueryParam();
	        param.setDcId(dcId);
	        param.setTitle(keyWord);
	        param.setSubmitterAccount(submitterAccount);
	        param.setAccepterAccount(accepterAccount);
	        param.setApplicantAccount(applicantAccount);
	        param.setStatus(status);
	        param.setCommented(commented);
	        param.setUrl(str.toString());
	        return param;
	}
	


/**
 * 分页条处理类,让分页条和分页对象分离
 * <p>
 */

public class PageProcessor {

    private static final int THRESHOLDFORELLIPSIS = 5;

    public static <T> PageBar process(Page<T> page) {
        int totalPage = page.getTotalPages();
        int currentPage = page.getPageNo();
        PageBar cssPageBar = new PageBar();
        cssPageBar.setLinkNums(linkNums(totalPage, currentPage));
        return cssPageBar;
    }

    private static int[] linkNums(int totalPage, int currentPage) {
        int[] pre = new int[0];
        int[] next = new int[0];
        if (totalPage > 0) {
            if (currentPage <= THRESHOLDFORELLIPSIS) {
                pre = new int[currentPage];
                for (int i = 0; i < pre.length; i++) {
                    pre[i] = i + 1;
                }
            } else if (currentPage == totalPage) {
                pre = new int[THRESHOLDFORELLIPSIS + 1];
                pre[0] = 1;
                pre[1] = 2;
                pre[2] = -1;
                pre[3] = currentPage - 2;
                pre[4] = currentPage - 1;
                pre[5] = currentPage;
            } else {
                pre = new int[THRESHOLDFORELLIPSIS];
                pre[0] = 1;
                pre[1] = 2;
                pre[2] = -1;
                pre[3] = currentPage - 1;
                pre[4] = currentPage;
            }
            if ((totalPage - currentPage) <= (THRESHOLDFORELLIPSIS - 1)) {
                next = new int[totalPage - currentPage];
                for (int i = 0; i < next.length; i++) {
                    next[i] = currentPage + i + 1;
                }
            } else if (currentPage == 1) {
                next = new int[THRESHOLDFORELLIPSIS];
                next[0] = 2;
                next[1] = 3;
                next[2] = -1;
                next[3] = totalPage - 1;
                next[4] = totalPage;
            } else {
                next = new int[THRESHOLDFORELLIPSIS - 1];
                next[0] = currentPage + 1;
                next[1] = -1;
                next[2] = totalPage - 1;
                next[3] = totalPage;
            }
        }

        int[] linkNums = new int[pre.length + next.length];

        int index = 0;
        for (int num : pre) {
            linkNums[index++] = num;
        }
        for (int num : next) {
            linkNums[index++] = num;
        }

        return linkNums;
    }

}


public class PageBar {
	
	private int [] linkNums;

	public int[] getLinkNums() {
		return linkNums;
	}

	public void setLinkNums(int[] linkNums) {
		this.linkNums = linkNums;
	}
	
}






                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值