package com.wcx.shop.utils;
import java.util.List;
/**
* 用于分页的工具类,所有初始化的操作都在构造函数中进行了,只需要传入数据总条数,总页数和每页条数(可选)即可。
* @author Administrator
* @param <T>
*/
public class Pager<T> {
private List<T> list; // 对象记录结果集
private int totalCount = 0; // 总记录数
private int pageSize = 10; // 每页显示记录数
private int totalPages = 1; // 总页数
private int pageNumber = 1; // 当前页
private int startPos = 0; // 起始位置
private boolean isFirstPage = false; // 是否为第一页
private boolean isLastPage = false; // 是否为最后一页
private boolean hasPreviousPage = false; // 是否有前一页
private boolean hasNextPage = false; // 是否有下一页
private int navigatePages = 8; // 导航页码数
private int[] navigatePageNumbers; // 所有导航页号
public Pager(int totalCount, int pageNumber) {
init(totalCount, pageNumber, pageSize);
}
public Pager(int totalCount, int pageNumber, int pageSize) {
init(totalCount, pageNumber, pageSize);
}
private void init(int totalCount, int pageNumber, int pageSize) {
this.totalCount = totalCount; //总记录数
this.pageSize = pageSize; //每页显示数目
this.totalPages = (this.totalCount - 1) / this.pageSize + 1;//总页数
// 根据输入可能错误的当前号码进行自动纠正
if (pageNumber < 1) {
this.pageNumber = 1;
} else if (pageNumber > this.totalPages) {
this.pageNumber = this.totalPages;
} else {
this.pageNumber = pageNumber;
}
this.startPos = (this.pageNumber - 1) * this.pageSize; //起始位置
// 基本参数设定之后进行导航页面的计算
calcNavigatePageNumbers();
// 以及页面边界的判定
judgePageBoudary();
}
/**
* 计算导航页
*/
private void calcNavigatePageNumbers() {
// 当总页数小于或等于导航页码数时
if (totalPages <= navigatePages) {
navigatePageNumbers = new int[totalPages];
for (int i = 0; i < totalPages; i++) {
navigatePageNumbers[i] = i + 1;
}
} else { // 当总页数大于导航页码数时
navigatePageNumbers = new int[navigatePages];
int startNum = pageNumber - navigatePages / 2;
int endNum = pageNumber + navigatePages / 2;
if (startNum < 1) {
startNum = 1;
// 最前navigatePages页
for (int i = 0; i < navigatePages; i++) {
navigatePageNumbers[i] = startNum++;
}
} else if (endNum > totalPages) {
endNum = totalPages;
// 最后navigatePages页
for (int i = navigatePages - 1; i >= 0; i--) {
navigatePageNumbers[i] = endNum--;
}
} else {
// 所有中间页
for (int i = 0; i < navigatePages; i++) {
navigatePageNumbers[i] = startNum++;
}
}
}
}
/**
* 判定页面边界
*/
private void judgePageBoudary() {
isFirstPage = pageNumber == 1;
isLastPage = pageNumber == totalPages && pageNumber != 1;
hasPreviousPage = pageNumber > 1;
hasNextPage = pageNumber < totalPages;
}
public void setList(List<T> list) {
this.list = list;
}
/**
* 得到当前页的内容
*
* @return {List}
*/
public List<T> getList() {
return list;
}
/**
* 得到记录总数
*
* @return {int}
*/
public int getTotalCount() {
return totalCount;
}
/**
* 得到每页显示多少条记录
*
* @return {int}
*/
public int getPageSize() {
return pageSize;
}
/**
* 得到页面总数
*
* @return {int}
*/
public int getTotalPages() {
return totalPages;
}
/**
* 得到当前页号
*
* @return {int}
*/
public int getPageNumber() {
return pageNumber;
}
/**
* 得到起始位置
*
* @return {int}
*/
public int getStartPos() {
return startPos;
}
/**
* 得到所有导航页号
*
* @return {int[]}
*/
public int[] getNavigatePageNumbers() {
return navigatePageNumbers;
}
public boolean isFirstPage() {
return isFirstPage;
}
public boolean isLastPage() {
return isLastPage;
}
public boolean hasPreviousPage() {
return hasPreviousPage;
}
public boolean hasNextPage() {
return hasNextPage;
}
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("[").append("totalCount=").append(totalCount).append(",totalPages=").append(
totalPages).append(",pageNumber=").append(pageNumber).append(
",pageSize=").append(pageSize).append(",isFirstPage=").append(
isFirstPage).append(",isLastPage=").append(isLastPage).append(
",hasPreviousPage=").append(hasPreviousPage).append(
",hasNextPage=").append(hasNextPage).append(
",navigatePageNumbers=");
int len = navigatePageNumbers.length;
if (len > 0)
sb.append(navigatePageNumbers[0]);
for (int i = 1; i < len; i++) {
sb.append(" " + navigatePageNumbers[i]);
}
sb.append(",list.size=" + list.size());
sb.append("]");
return sb.toString();
}
}
分页通用工具类
最新推荐文章于 2023-06-27 17:38:00 发布