package courses.util; import java.util.ArrayList; import java.util.List; /* * 通用分页器 */ public class Pager { protected int pageSize = 5; //每页大小 protected int pageNo = 1; //当前页码 protected int rowCount = 0; //记录总数 protected int pageCount = 1; //总页数 protected int firstPageNo = 1; protected int prePageNo = 1; protected int nextPageNo = 1; protected int lastPageNo = 1; protected int groupId = 1; //当前组号 protected int preGroup = 1; //上一组号 protected int nextGroup = 1; //下一组号 protected int pageNoGroup[] = null; //页号数组 protected int[] pageSizeList = {5, 8, 10, 15, 20}; //页面大小数组 protected List resultList; //查询的结果集List /* * pageCount(总页数)由rowCount(记录总数)和pageSize(页面大小)计算得出 * groupCount(页号组数)由pageCount(总页数)和groupSize(页号数组大小)计算得出 */ //在构造方法中完成各个参数的计算 public Pager(int pageSize, int pageNo, int groupId, int rowCount, List resultList) { this.pageSize = pageSize; //从用户请求中获得 this.pageNo = pageNo; //从用户请求中获得 this.groupId = groupId; //从用户请求中获得 this.rowCount = rowCount; //rowCount从dao中获得 this.resultList = resultList; //resultList从dao中获得 //根据rowCount和pageSize计算总页数 this.pageCount = (rowCount + pageSize -1) / pageSize; //最后一页 this.lastPageNo = this.pageCount; //计算上一页 if(this.pageNo > 1) { this.prePageNo = this.pageNo - 1; } //计算下一页 if(this.pageNo == this.lastPageNo) { this.nextPageNo = this.lastPageNo; } else { this.nextPageNo = this.pageNo + 1; } /* * 根据总页数pageCount和页号数组大小groupSize,提取页号中的一组, * 构造pageNoGroup数组包装其中一组,供前台显示 */ int groupCount = 1; //初始化总的pageNoGroup数 int groupSize = 5; //初始化pageNoGroup数组的大小 //根据pageCount计算总的pageGroup数 groupCount = (this.pageCount + groupSize -1) / groupSize; /* * 特殊情况,当记录总数为0时,应该返回一个空数组 */ /*可以在这里判断用户请求的groupId是否超出实际最大值 * if(groupId>groupCount) * { * groupId = 1; * } */ //计算上一组号 if(this.groupId > 1 && this.groupId <= groupCount) { this.preGroup = this.groupId - 1; } //计算下一组号 if(this.groupId == groupCount)//已经是最后一组 { this.nextGroup = groupCount; } else { this.nextGroup = this.groupId + 1; } //计算最后一组(特殊组,特殊考虑)的pageNo个数 int restPageNoCount = this.pageCount % groupSize; /* * 设置目标数组,封装一组pageNo, * 数组大小根据最后一组pageNo的个数确定 */ int pageNoGroup[] ; //目标数组 //如果pageCount为groupSize的整数倍, //则按预定的groupSize大小构造目标数组 if(restPageNoCount == 0) { //该组起始的pageNo,注意startPageNo从1开始 int startPageNo = (this.groupId - 1) * groupSize + 1; pageNoGroup = new int[groupSize]; for(int i=0; i<=(groupSize-1); i++) { pageNoGroup[i] = startPageNo; startPageNo++; } } else//否则判断请求是否是最后一组,最后一组,特殊处理 { //不是最后一组,并且总组数大于1,则仍然按预定groupSize的大小构造目标数组 if(this.groupId < groupCount) { //该组起始的pageNo,注意startPageNo从1开始 int startPageNo = (this.groupId-1) * groupSize +1; pageNoGroup = new int[groupSize]; for(int i=0; i<=(groupSize-1); i++) { pageNoGroup[i] = startPageNo; startPageNo++; } } //最后一组,则按剩下的restCount大小构造pageNoGroup数组 else { //该组起始的pageNo,注意startPageNo从1开始 int startPageNo = (this.groupId-1) * groupSize +1; pageNoGroup = new int[restPageNoCount]; for(int i=0; i<=(restPageNoCount-1); i++) { pageNoGroup[i] = startPageNo; startPageNo++; } } } //封装目标数组 this.pageNoGroup = pageNoGroup; } //将pageNo(页面号)进行分组 public int[] getPageNoGroup() { //如果总的记录数为0,则返回空数组 if(this.rowCount == 0) { return null; } else { return this.pageNoGroup; } } //构造页面大小数组 public Object[] getPageSizeIndexs() { List result = new ArrayList(pageSizeList.length); for(int i = 0;i < pageSizeList.length;i++) { result.add(String.valueOf(pageSizeList[i])); } Object[] indexs = (result.toArray()); return indexs; } //构造页号数组 //pojo方法,无需在类中设置属性,也可以按属性名称进行访问 public Object[] getPageNoIndexs() { List result = new ArrayList(pageCount); for(int i = 0;i < pageCount;i++) { result.add(String.valueOf(i + 1)); } Object[] indexs = (result.toArray()); return indexs; } public int getPageCount() { return pageCount; } public void setPageCount(int pageCount) { this.pageCount = pageCount; } public int getPageNo() { return pageNo; } public void setPageNo(int pageNo) { this.pageNo = pageNo; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int[] getPageSizeList() { return pageSizeList; } public void setPageSizeList(int[] pageSizeList) { this.pageSizeList = pageSizeList; } public List getResultList() { return resultList; } public void setResultList(List resultList) { this.resultList = resultList; } public int getRowCount() { return rowCount; } public void setRowCount(int rowCount) { this.rowCount = rowCount; } public int getFirstPageNo() { return firstPageNo; } public void setFirstPageNo(int firstPageNo) { this.firstPageNo = firstPageNo; } public int getLastPageNo() { return lastPageNo; } public void setLastPageNo(int lastPageNo) { this.lastPageNo = lastPageNo; } public int getNextPageNo() { return nextPageNo; } public void setNextPageNo(int nextPageNo) { this.nextPageNo = nextPageNo; } public int getPrePageNo() { return prePageNo; } public int getGroupId() { return groupId; } public void setGroupId(int groupId) { this.groupId = groupId; } public int getPreGroup() { return preGroup; } public void setPreGroup(int preGroup) { this.preGroup = preGroup; } public int getNextGroup() { return nextGroup; } public void setNextGroup(int nextGroup) { this.nextGroup = nextGroup; } public void setPrePageNo(int prePageNo) { this.prePageNo = prePageNo; } }