基于struts2的分页组件

自己写了一个分页

凑合着用

根据前2后3的设定:

当选择了第5页,生成5的前2页和5的后3页,则indexList为: 345678

当选择了第6页,则indexList为: 456789

 

package com.mtea.shop.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import com.mtea.shop.util.MathUtil;


/**
 * 分页
 * @author macrotea
 * 2011-3-27
 */
public class Pager implements Serializable{
	private static final long serialVersionUID = 1L;
	
	//默认页大小
	private static final int DEFALT_PAGE_SIZE=5;
	//页码索引限制为5个
	private static final int DEFALT_DIPSLAY_LIMIT=5;
	//前导限制2
	private static final int DEFALT_PREV_LIMIT=2;
	//后续限制3
	private static final int DEFALT_NEXT_LIMIT=3;
	
	//当前页码
	private int pageNumber;
	//每页大小
	private int pageSize;
	//总页数
	private int pageTotal;
	//总记录数
	private int rowTotal;
	//数据链表
	private List dataList;
	
	//上一页
	private int prevPage;
	//下一页
	private int nextPage;
	//第一页
	private int firstPage;
	//最后一页
	private int lastPage;
	//页码索引链表
	private List<Integer> indexList;
	
	
	public static void main(String[] args) {
		Pager pager=new Pager(12,DEFALT_PAGE_SIZE,56,null);
	}
	
	
	public Pager() {
		super();
	}

	public Pager(int pageNumber, int pageSize, int rowTotal, List dataList) {
		super();
		this.pageNumber = pageNumber;
		this.pageSize = pageSize;
		this.rowTotal = rowTotal;
		this.dataList = dataList;
		extInit();
	}
	
	public void extInit(){
		/*handle pageTotal*/ 
		this.pageTotal=MathUtil.selfCountByRemainder(rowTotal, pageSize);
		
		/*handle nextPage&prevPage*/ 
		if (this.pageTotal > 0 && this.pageTotal > this.pageNumber) {
			this.nextPage = this.pageNumber + 1;
		}else{
			//当pageNumber太大,则下一页也设置为pageTotal
			this.nextPage=pageTotal;
		}
		if (this.pageNumber > 1&& this.pageTotal >= this.pageNumber) {
			this.prevPage = this.pageNumber - 1;
		}else{
			//当pageNumber==1,则上一页也设置为1
			this.prevPage=1;
		}
		
		/*handle firstPage&lastPage*/ 
		firstPage=1;
		lastPage=pageTotal;
		
		/* handle indexList */
		indexList = new ArrayList<Integer>();
		if (this.pageTotal >= this.pageNumber && pageNumber >= DEFALT_DIPSLAY_LIMIT) {
			// 处理中间情况:前2后3
			for (int i = pageNumber - DEFALT_PREV_LIMIT; i < pageNumber; i++) {
				System.out.println("处理中间情况:" + i);
				indexList.add(i);
			}
			//处理尾部情况
			if (pageTotal - pageNumber >= DEFALT_NEXT_LIMIT) {
				for (int i = pageNumber; i <= pageNumber + DEFALT_NEXT_LIMIT; i++) {
					System.out.println("处理尾部情况##:" + i);
					indexList.add(i);
				}
			} else {
				for (int i = pageNumber; i <= pageTotal; i++) {
					System.out.println("处理尾部情况**:" + i);
					indexList.add(i);
				}
			}
		}else{
			//处理前部情况和不合理的pageNumber
			//handle: this.pageTotal < this.pageNumber
			//6<88:12345
			if(this.pageTotal >=DEFALT_DIPSLAY_LIMIT){
				for (int i = 1; i <= DEFALT_DIPSLAY_LIMIT; i++) {
					System.out.println("不合理的pageNumber:"+i);
					indexList.add(i);
				}
			//handle: pageNumber < DEFALT_DIPSLAY_LIMIT
			//3<5:123
			}else{
				for (int i = 1; i <= pageTotal; i++) {
					System.out.println("处理前部情况:"+i);
					indexList.add(i);
				}
			}
		}
	}

	public int getPageSize() {
		return pageSize;
	}


	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}


	public int getPageTotal() {
		return pageTotal;
	}


	public void setPageTotal(int pageTotal) {
		this.pageTotal = pageTotal;
	}


	public void setRowTotal(int rowTotal) {
		this.rowTotal = rowTotal;
	}


	public int getRowTotal() {
		return rowTotal;
	}

	public void setPageNumber(int pageNumber) {
		this.pageNumber = pageNumber;
	}

	public int getPageNumber() {
		return pageNumber;
	}

	public void setDataList(List dataList) {
		this.dataList = dataList;
	}

	public List getDataList() {
		return dataList;
	}
	

	public int getPrevPage() {
		return prevPage;
	}

	public void setPrevPage(int prevPage) {
		this.prevPage = prevPage;
	}

	public int getNextPage() {
		return nextPage;
	}

	public void setNextPage(int nextPage) {
		this.nextPage = nextPage;
	}

	public int getFirstPage() {
		return firstPage;
	}


	public void setFirstPage(int firstPage) {
		this.firstPage = firstPage;
	}


	public int getLastPage() {
		return lastPage;
	}


	public void setLastPage(int lastPage) {
		this.lastPage = lastPage;
	}


	public List<Integer> getIndexList() {
		return indexList;
	}


	public void setIndexList(List<Integer> indexList) {
		this.indexList = indexList;
	}


	@Override
	public String toString() {
		return "当前页=" + pageNumber + "\n每页行数=" + pageSize + "\n页总数=" + pageTotal + "\n行总数=" + rowTotal + "\n上一页=" + prevPage + "\n下一页=" + nextPage
		+ "\nindexList:" +indexList;
	}
}

 

jsp页面:

 

 

<div id="pager">
<a href="/page/admin/bookCategory_list?pageNumber=<s:property value="pager.firstPage"/>">第一页</a>
|
<a href="/page/admin/bookCategory_list?pageNumber=<s:property value="pager.prevPage"/>">上一页</a>
(
<span id="pageNumbers">
<s:iterator value="pager.indexList" var="eachIndex">
	<%--pageNumber是Action中的int值--%>
	<s:if test='%{#eachIndex==pageNumber}'>
	<s:property />
	</s:if>
	<s:else>
	<a href="/page/admin/bookCategory_list?pageNumber=<s:property />"><s:property /></a>
	</s:else>
</s:iterator>           
</span>
)
<a href="/page/admin/bookCategory_list?pageNumber=<s:property value="pager.nextPage"/>">下一页</a>
|
<a href="/page/admin/bookCategory_list?pageNumber=<s:property value="pager.lastPage"/>">最后一页</a>
(第<s:property value="pageNumber"/>页/共<s:property value="pager.pageTotal"/>页 <s:property value="pager.rowTotal"/>条记录 )
</div>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值