基于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>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
牙科就诊管理系统利用当下成熟完善的SSM框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的Mysql数据库进行程序开发。实现了用户在线查看数据。管理员管理病例管理、字典管理、公告管理、药单管理、药品管理、药品收藏管理、药品评价管理、药品订单管理、牙医管理、牙医收藏管理、牙医评价管理、牙医挂号管理、用户管理、管理员管理等功能。牙科就诊管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 管理员在后台主要管理病例管理、字典管理、公告管理、药单管理、药品管理、药品收藏管理、药品评价管理、药品订单管理、牙医管理、牙医收藏管理、牙医评价管理、牙医挂号管理、用户管理、管理员管理等。 牙医列表页面,此页面提供给管理员的功能有:查看牙医、新增牙医、修改牙医、删除牙医等。公告信息管理页面提供的功能操作有:新增公告,修改公告,删除公告操作。公告类型管理页面显示所有公告类型,在此页面既可以让管理员添加新的公告信息类型,也能对已有的公告类型信息执行编辑更新,失效的公告类型信息也能让管理员快速删除。药品管理页面,此页面提供给管理员的功能有:新增药品,修改药品,删除药品。药品类型管理页面,此页面提供给管理员的功能有:新增药品类型,修改药品类型,删除药品类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值