分页通用工具类

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();
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值