JSP+Hibernate分页实现

本文介绍了分页工具包的实现方法,包括分页计算、后台实现和JSP前台实现,详细解释了如何通过参数调整分页显示效果,并讨论了当前实现的局限性和改进方向。
分页计算工具包:
public class Pagenation {
	//第几页
	private Integer pageNum;
	//
	private Integer rowCount;
	//数据集合
	private List data;
	//每页数量
	private Integer size;
	private Integer pageCount;
	private Integer startRow;
	
	private Integer first = 1;
	private Integer last;
	private Integer previous; 
	private Integer next;  
	
	private Integer startNav;  
	private Integer endNav;  
	private Integer navCount = 10;
	
	public Pagenation(Integer  pn, Integer rowCount){
		//如果页数为空,就设置为1,否则设置为pn
		this.pageNum = (pn==null)?1:pn;
		//每页最大显示数量
		this.rowCount = rowCount;
		this.size = 10;
		
		this.pageCount  =  (int) Math.ceil(this.rowCount/10.0);
		this.pageNum  = Math.min(this.pageNum , pageCount);
		this.pageNum  = Math.max(1, this.pageNum);
		
		
		this.startRow = (this.pageNum-1) * size ;
		
		this.last = this.pageCount;
		
		this.previous = Math.max(1 , this.pageNum-1);
		this.next = Math.min( this.pageCount, this.pageNum+1);
		
		this.startNav = (this.pageNum-navCount/2<1)?1:this.pageNum-navCount/2;
		this.endNav = this.startNav+this.navCount;
		this.endNav = Math.min(this.endNav, this.pageCount);
		
		if(this.endNav-this.startNav  < this.navCount){
			this.startNav = Math.max(this.endNav-this.navCount, 1);
		}
		
	}
	
	public Pagenation(Integer pn, Integer rowCount, Integer size) {

		this.pageNum = (pn==null)?1:pn;
		this.rowCount = rowCount;
		this.size = (size==null)? 10 : size;
		
		this.pageCount  =  (int) Math.ceil(this.rowCount*1.0/this.size);
		this.pageNum  = Math.min(this.pageNum , pageCount);
		this.pageNum  = Math.max(1, this.pageNum);
		
		
		this.startRow = (this.pageNum-1) * size ;
		
		this.last = this.pageCount;
		
		this.previous = Math.max(1 , this.pageNum-1);
		this.next = Math.min( this.pageCount, this.pageNum+1);
		
		this.startNav = (this.pageNum-navCount/2<1)?1:this.pageNum-navCount/2;
		this.endNav = this.startNav+this.navCount;
		this.endNav = Math.min(this.endNav, this.pageCount);
		
		if(this.endNav-this.startNav  < this.navCount){
			this.startNav = Math.max(this.endNav-this.navCount, 1);
		}
	
	}
	
	public Pagenation() {
	}
	
	
	
	public Integer getPageNum() {
		return pageNum;
	}

	public void setPageNum(Integer pageNum) {
		this.pageNum = pageNum;
	}

	public Integer getRowCount() {
		return rowCount;
	}

	public void setRowCount(Integer rowCount) {
		this.rowCount = rowCount;
	}

	

	public List getData() {
		return data;
	}

	public void setData(List data) {
		this.data = data;
	}

	public Integer getSize() {
		return size;
	}

	public void setSize(Integer size) {
		this.size = size;
	}

	public Integer getStartRow() {
		return startRow;
	}

	public void setStartRow(Integer startRow) {
		this.startRow = startRow;
	}

	public Integer getPageCount() {
		return pageCount;
	}

	public void setPageCount(Integer pageCount) {
		this.pageCount = pageCount;
	}

	public Integer getFirst() {
		return first;
	}

	public void setFirst(Integer first) {
		this.first = first;
	}

	public Integer getLast() {
		return last;
	}

	public void setLast(Integer last) {
		this.last = last;
	}

	public Integer getPrevious() {
		return previous;
	}

	public void setPrevious(Integer previous) {
		this.previous = previous;
	}

	public Integer getNext() {
		return next;
	}

	public void setNext(Integer next) {
		this.next = next;
	}

	public Integer getStartNav() {
		return startNav;
	}

	public void setStartNav(Integer startNav) {
		this.startNav = startNav;
	}

	public Integer getEndNav() {
		return endNav;
	}

	public void setEndNav(Integer endNav) {
		this.endNav = endNav;
	}

	public Integer getNavCount() {
		return navCount;
	}

	public void setNavCount(Integer navCount) {
		this.navCount = navCount;
	}
	
}
Hibernate后台实现(返回page):
/**
	 * 记录总数查询
	 * @return
	 * @throws Exception
	 */
	public int findTotal() throws Exception {
		List<Number>  list=getHibernateTemplate().find(hql);
			Number  count = list.get(0);
		return count.intValue();
	}
        /**
	 * 分页查询
	 */
	@Override
	public Pagenation find4Page(Integer pageNum, Integer pageSize) throws Exception {
		Pagenation  pagenation= new Pagenation(pageNum, findTotal(), pageSize);
		DetachedCriteria criteria = DetachedCriteria.forClass(ProdModel.class);
		List<ProdModel> userList = getHibernateTemplate()
			.findByCriteria(criteria, pagenation.getStartRow(), pageSize);
		pagenation.setData(userList);
		return pagenation;
	}
前台JSP实现:
<!--分页 -->
    <div class="page clear xd">
	<a class="prev atd" href="prodAction!find4PageByParam?pageNum=${page.previous}&&status=0">上一页<b></b>
		</a>
		<c:forEach begin="${page.startNav}" end="${page.endNav}" var="nav">
				<c:choose>
					<c:when test="${page.pageNum==nav}">
						<a name="curr" title="${nav }" class="atd"
							href="javascript:void(0);">${nav }</a>
					</c:when>
					<c:otherwise>
						<a name="page" title="${nav }" class="atd_curr"
							href="prodAction!find4PageByParam?pageNum=${nav}&&status=0">${nav }</a>
					</c:otherwise>
				</c:choose>
			</c:forEach>
		<a class="next atd" href="prodAction!find4PageByParam?pageNum=${page.next}&&status=0">下一页<b></b>
		</a>

	</div>

</div>
缺点:
虽然实现了分页,但是当查询条件发生变更时,分页href需要跟着变更。而我们目前的实现是无法变更的。所以需要对分页进行下一步的封装

转载于:https://my.oschina.net/xinyuan6009/blog/165251

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值