/* * 文件名称: PageInfo.java * 版权信息: Copyright 2001-2011 ZheJiang chunchen Data System Co., LTD. All right reserved. * ---------------------------------------------------------------------------------------------- * 修改历史: * ---------------------------------------------------------------------------------------------- * 修改原因: 新增 * 修改人员: LuoJingtian * 修改日期: 2011-12-14 * 修改内容: */ package com.mfh.comn.bean; /** * 分页信息,注意第一页用1表示,不是0,这与服务器端一致。 * @author <a href="mailto:luojt@zjcds.com">LuoJingtian</a> created on 2011-12-14 */ public class PageInfo { public static final int FIRST_PAGE_NO = 1; public static final int DEFAULT_PAGE_SIZE = 20; public final static int TOTALCOUNT_NOTINIT = -1; public final static int PAGENO_NOTINIT = 0; public final static int PAGENO_LASTNO = 999999999;//代表最后一页,具体页数需要待定。 private boolean fromLast = false; /** 当前页号,1代表第一页;0代表未初始化 */ private int pageNo = PAGENO_NOTINIT; /** 每页记录条数 */ private int pageSize = DEFAULT_PAGE_SIZE; /** 总页数*/ private int totalPage = 0; /** 总记录数 */ private int totalCount = TOTALCOUNT_NOTINIT; /** 默认构造函数 */ public PageInfo() { pageSize = DEFAULT_PAGE_SIZE; } /** * 翻页次序,是否从后往前 * @return */ public boolean isFromLast() { return fromLast; } /** * 构造函数 * @param pageSize */ public PageInfo(int pageSize) { this.pageSize = pageSize; } /** 构造函数 */ public PageInfo(int pageNo, int pageSize) { this.pageNo = pageNo; if (pageNo == PAGENO_LASTNO) fromLast = true; else fromLast = false; this.pageSize = pageSize; } /** * 构造函数 * @param fromLast 是否反向 * @param pageSize 页数 */ public PageInfo(boolean fromLast, int pageSize) { this.pageSize = pageSize; this.fromLast = fromLast; if (fromLast) this.pageNo = PAGENO_LASTNO; else this.pageNo = PAGENO_NOTINIT; } /** * 设置总数 * @param totalCount */ public void setTotalCount(int totalCount) { this.totalCount = totalCount; reCalcTotalCount(totalCount, pageSize); } /** * 重置 * @author zhangyz created on 2013-4-11 */ public void reset() { totalPage = 0; this.totalCount = TOTALCOUNT_NOTINIT; if (fromLast) this.pageNo = PAGENO_LASTNO; else this.pageNo = PAGENO_NOTINIT; } /** * @param totalCount * @author huangwb created on 2012-2-23 * @since */ private void reCalcTotalCount(int totalCount, int pageSize) { if (pageSize != 0) { totalPage = totalCount / pageSize; if (totalCount % pageSize > 0) { totalPage ++; } //如果指示从后向开始且未初始化,则直接跳到开始处(即最后一页) if (pageNo == PAGENO_LASTNO) this.moveToFirst(); else if (pageNo == PAGENO_LASTNO - 1) {//可能已经moveNext过一次了。 this.moveToFirst(); this.moveToNext();//补充move一下 } } } public int getPageSize() { return pageSize; } /** * @return * @author zhangyz created on 2013-4-11 */ public int getPageNo() { return pageNo; } /** * 设置页号,1代表第一页。 * 建议用prePageNo和nextPageNo代替 * @param pageNo * @author zhangyz created on 2013-4-11 */ public void setPageNo(int pageNo) { if (pageNo > 0) { this.pageNo = pageNo; if (pageNo == PAGENO_LASTNO) fromLast = true; else fromLast = false; } } public int getPageIndex() { return pageNo - 1; } /** * 是否还未初始化过,即没有读过总记录数 * @return * @author zhangyz created on 2013-4-11 */ public boolean isNotInit() { if (this.totalCount == TOTALCOUNT_NOTINIT) return true; else return false; } /** * 是否还有下一页 * @return * @author zhangyz created on 2013-4-11 */ public boolean hasNextPage() { if (fromLast) { if (pageNo >= FIRST_PAGE_NO || isNotInit()) return true; else return false; } else { if (pageNo < totalPage || isNotInit()) return true; else return false; } } /** * 翻到下一页 * @return 返回页号 * @author zhangyz created on 2013-4-11 */ public int moveToNext() { if (fromLast) { if (hasNextPage()) pageNo--; return pageNo - 1; } else { if (hasNextPage()) pageNo++; else throw new RuntimeException("已经是最后一页!"); return pageNo - 1; } } /** * 翻到最后一页 * @return 返回上页 * @author zhangyz created on 2013-4-15 */ public void moveToLast () { if (fromLast) pageNo = FIRST_PAGE_NO; else pageNo = this.totalPage; } /** * 移到第一页 * * @author zhangyz created on 2013-4-15 */ public void moveToFirst() { if (fromLast) pageNo = this.totalPage; else pageNo = FIRST_PAGE_NO; } /** * 是否还有上一页 * @return * @author zhangyz created on 2013-4-13 */ public boolean hasPrevPage() { if (fromLast) { if (pageNo < this.totalPage) return true; else return false; } else { if (pageNo <= FIRST_PAGE_NO) return false; else return true; } } /** * 移到上一页 * @return 返回页号 * @author zhangyz created on 2013-4-11 */ public int moveToPrev() { if (fromLast) { pageNo++; return pageNo - 1; } else { pageNo--; return pageNo - 1; } } public void setPageSize(int pageSize) { if (pageSize > 0) { this.pageSize = pageSize; reCalcTotalCount(totalCount, pageSize); } } public int getTotalCount() { return totalCount; } /** * 获取已经读取的个数。不是很精确。因为最后一页可能没有读满。 * @return 0:代表还未读取;>0,代表读取至的位置 * @author zhangyz created on 2013-5-7 */ public int getHavedCount() { int haveCount; if (fromLast) haveCount = (totalPage - pageNo) * pageSize; else haveCount = (pageNo) * pageSize; if (haveCount < 0) haveCount = 0; if (haveCount > totalCount) haveCount = totalCount; return haveCount; } /** * 获取上一次读取结束的位置,用于分页 * @return 0:代表还未读取;>0,代表读取至的位置 * @author zhangyz created on 2013-5-7 */ public int getStartCount() { int haveCount; if (fromLast) haveCount = pageNo * pageSize; else haveCount = (pageNo -1) * pageSize; if (haveCount < 0) haveCount = 0; return haveCount; } public void setTotalPage(int totalPage) { this.totalPage = totalPage; } public int getTotalPage() { return totalPage; } /** * 直接设置成一页 * @param totalCount * @author zhangyz created on 2013-6-6 */ public void setToOnePage(int totalCount) { if (isNotInit()) {//一次性查出,无须分页。 setPageSize(totalCount + 1); setTotalCount(totalCount); } } }