`

分页插件(2)

    博客分类:
  • java
 
阅读更多

在上一章了解分页sql语句(1)实现后,写一个类实现分页的各个参数,函数和链接。

 链接格式:总共n页 当前页是10,(1 2 ... 7 8 9 10 11 12 ... n-1 n)

Paging.java

package com.by.eshop.util.web.paging;

import java.util.ArrayList;

/**
 *       约定: 页数从1开始,行数从1开始
 */
public class Paging {

	public static final int DEFAULT_PAGING_SIZE = 10;  // 默认每页显示行数

	private int maxRowNumber = 0; // 总记录数
	private int pageNumber = 1;      // 第几页
	private int pageSize = 10;         // 默认每页显示行数
	private ArrayList<String> pageList = new ArrayList<String>();

//     总记录数
	public Paging(int maxRowNumber) {
		if (maxRowNumber > -1) {
			this.maxRowNumber = maxRowNumber;
		}
		this.pageSize = DEFAULT_PAGING_SIZE;
	}
//     设置第几页
	public void setPageNumber(int pageNumber) {
		if (this.pageNumber > 0) {
			this.pageNumber = pageNumber;
		}
	}
//      设置每页显示数
       public void setPageSize(int pageSize) {
		if (this.pageSize > -1) {
			this.pageSize = pageSize;
		}
	}
//      获取该页开始记录数
	public int getStartRowNumber() {
		return (this.pageNumber - 1) * this.pageSize + 1;
	}
//      获取该页结束记录数
	public int getEndRowNumber() {
		return this.getStartRowNumber() + this.pageSize - 1;
	}
//      获取当前页
	public int getPageNumber() {
		return this.pageNumber;
	}
//      获取总页数
	public int getPageCount() {
		return this.maxRowNumber % this.pageSize == 0 ? (this.maxRowNumber / this.pageSize) : (this.maxRowNumber / this.pageSize + 1);
	}
//      判断是否有上一页
	public boolean hasPreviousPaging() {
		return this.pageNumber > 1;
	}
//      判断是否有下一页
	public boolean hasNextPaging() {
		return this.pageNumber < this.getPageCount();
	}
//      获取下一页
	public Paging getNextPaging() {
		if (!hasNextPaging()) {
			return null;
		}
		Paging paging = new Paging(maxRowNumber);  // 总记录数
		paging.setPageNumber(pageNumber + 1);         // 设置页数
		paging.setPageSize(pageSize);                          // 每页记录数
		return paging;
	}
//      获取上一页
	public Paging getPreviousPaging() {
		if (!hasPreviousPaging()) {
			return null;
		}
		Paging paging = new Paging(maxRowNumber);
		paging.setPageNumber(pageNumber - 1);
		paging.setPageSize(pageSize);
		return paging;
	}
//     首页
	public Paging getFirstPaging() {
		Paging paging = new Paging(maxRowNumber);
		paging.setPageNumber(1);
		paging.setPageSize(pageSize);
		return paging;
	}
//      尾页
	public Paging getEndPaging() {
		Paging paging = new Paging(maxRowNumber);
		paging.setPageNumber(this.getPageCount());
		paging.setPageSize(pageSize);
		return paging;
	}
//     创建页数的链表 格式如下 1 2 ... 15 16 17 ... 29 30
	public void creatPageList() {
		int start_end_page_count = 2;
		int middle_page_count=3;
		int totalPages = getPageCount();   // 总页数
		
		if(totalPages==0)
			return;
		pageNumber = Math.max(1, Math.min(pageNumber,totalPages));  // 第几页
//             如果当前页不是1 加入上一页链接
		if (pageNumber != 1) {
			this.pageList.add("<a class='page_link' href='javascript:void(0)' id='" + String.valueOf(pageNumber - 1) + "'>上一页</a>");
		}
//              如果总页数小于11就简单的显示数字链接(当前页不需要链接)
		if(totalPages<=(middle_page_count+start_end_page_count)*2+1){
			for(int i=1;i<=totalPages;i++)
				if (i == pageNumber)
					this.pageList.add("<span class='page_now'>"
							+ String.valueOf(i) + "</span>");
				else
					this.pageList.add("<a href='javascript:void(0)' id='"
							+ String.valueOf(i) + "'>" + String.valueOf(i)
							+ "</a>");

		}	
		else {
//                      让开始2页和当前页之间的用...来表示 (前提是总页数大于10)
                         if (pageNumber - middle_page_count > start_end_page_count + 1) {
				// 12 ... n-3 n-2 n-1 n
                                // 前部分
                                 for (int i = 1; i <= start_end_page_count; i++)
					this.pageList.add("<a href='javascript:void(0)' id='"+ String.valueOf(i) + "'>" + String.valueOf(i)+ "</a>");
                               // 中间
				this.pageList.add("<span class='page_dot'>...</span>");
                               // 后面
				for (int i = pageNumber - middle_page_count; i <= pageNumber; i++) {
					if (i == pageNumber)
						this.pageList.add("<span class='page_now'>"+ String.valueOf(i) + "</span>");
					else
						this.pageList.add("<a href='javascript:void(0)' id='"+ String.valueOf(i) + "'>" + String.valueOf(i)+ "</a>");
				}
			} else {
                              // 否则只是显示页数链接
                              for (int i = 1; i <= pageNumber; i++) {
					if (i == pageNumber)
						this.pageList.add("<span class='page_now'>"+ String.valueOf(i) + "</span>");
					else
						this.pageList.add("<a href='javascript:void(0)' id='"+ String.valueOf(i) + "'>" + String.valueOf(i)+ "</a>");
			}
		}
                        //在后面的中间加入...
                          if (pageNumber + middle_page_count < totalPages- start_end_page_count - 1) {
				// nn+1n+2...e-1e

				for (int i = pageNumber + 1; i <= pageNumber+ middle_page_count; i++)
					this.pageList.add("<a href='javascript:void(0)' id='"+ String.valueOf(i) + "'>" + String.valueOf(i)+ "</a>");

				this.pageList.add("<span class='page_dot'>...</span>");

				for (int i = totalPages - start_end_page_count + 1; i <= totalPages; i++)
					this.pageList.add("<a href='javascript:void(0)' id='"+ String.valueOf(i) + "'>" + String.valueOf(i)+ "</a>");
			} else {
				for (int i = pageNumber + 1; i <= totalPages; i++)
					this.pageList.add("<a href='javascript:void(0)' id='"+ String.valueOf(i) + "'>" + String.valueOf(i)+ "</a>");
		}
	}
//             当前页不是尾页且总页数不是1页 加入下一页链接
		if (pageNumber != totalPages && totalPages != 1) {
			this.pageList.add("<a class='page_link' href='javascript:void(0)' id='" + String.valueOf(pageNumber + 1) + "'>下一页</a>");
		}
		
	}

	@Override
	public String toString() {
		if (pageList.isEmpty()) {
			creatPageList();
		}

		StringBuilder sbu = new StringBuilder();
		for (String s : this.pageList) {
			sbu.append(s).append(" ");
		}

		return sbu.toString();
	}

	public int getMaxRowNumber() {
		return maxRowNumber;
	}

	public int getPageSize() {
		return pageSize;
	}

	public ArrayList<String> getPageList() {
		if(pageList.isEmpty()){
			creatPageList();
		}
		return this.pageList;
	}
}
 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics