使用pager-taglib完成分页,以及对分页的分装

1.分页显示所必须需要知道的两个参数:总记录数和当前页数的返回结果集,所以第一要做的就是对这两个参数的分装,新建一个PagerModel类

public class PagerModel {
	
	/**
	 * 总记录数
	 */
	private int total; 
	/**
	 * 当前页结果集
	 */
	private List datas;
 
	public List getDatas() {
		return datas;
	}


	public void setDatas(List datas) {
		this.datas = datas;
	}


	public int getTotal() {
		return total;
	}


	public void setTotal(int total) {
		this.total = total;
	}
}
2.之后实现对PagerModel类的分装,新建一个AbstractManager类;
 public class AbstractManager extends HibernateDaoSupport {
	 
   public PagerModel searchPaginated(String hql,int offset,int pagesize){
	   return searchPaginated(hql,null,offset, pagesize);
   }
   public PagerModel searchPaginated(String hql,Object obj,int offset,int pagesize){
	   return searchPaginated(hql, new Object[]{obj},offset, pagesize);  
   }
    public PagerModel searchPaginated(String hql,Object[] params,int offset,int pagesize){
	     String countHql=getCountQuery(hql);
	     Query query=getSession().createQuery(countHql);
	     if(params != null && params.length > 0){
				for(int i=0; i<params.length; i++){
					query.setParameter(i, params[i]);
				}
			}
	    //总页数
	     int total=((Long)query.uniqueResult()).intValue();
	    //获得当前页数的结果集;
	    query=getSession().createQuery(hql);
	    if(params != null && params.length > 0){
			for(int i=0; i<params.length; i++){
				query.setParameter(i, params[i]);
			}
		}
	    query.setFirstResult(offset);
	    query.setMaxResults(pagesize);
	    List datas=query.list();
	    PagerModel pm=new PagerModel();
	    pm.setTotal(total);
	    pm.setDatas(datas);
	    return pm;
   }
   private String getCountQuery(String hql){
	    int index=hql.indexOf("from");
	    if(index!=-1){
	    	return "select count(*)"+hql.substring(index);
	    } 
	    throw new SystemException("无效的hql语句");
	     
   }
}
3.在实现类中去继承AbstractManager这个分装类
public class OrgManagerImpl extends AbstractManager implements OrgManager {
 
 	public PagerModel findOrgs(int parentId,int offset,int pagesize) {
		 
 	//如果parentId=0,则查找顶级机构列表
 		if(parentId == 0){
 		return searchPaginated("from Orgnization o where o.parent is null",offset,pagesize);
 	}
 		return searchPaginated("from Orgnization o where o.parent.id = ?", parentId,offset,pagesize);
       }
}

4.在action类中获得参数之后,将参数传入到jsp页面

public class OrgAction extends DispatchAction {
	 @Override
	protected ActionForward unspecified(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		OrgActionForm oaf = (OrgActionForm)form;
		
		int offset = 0;
		try {
			offset = Integer.parseInt(request.getParameter("pager.offset"));
		} catch (Exception ignore) {
		}
		
		int pagesize = 10;
		
		request.setAttribute("pm",
			orgManager.findOrgs(oaf.getParentId(),offset,pagesize)
		);
		
		//
		int ppid = 0;
		if(oaf.getParentId() != 0){
			Orgnization org = orgManager.findOrg(oaf.getParentId());
			Orgnization parent = org.getParent();
			if(parent != null){
				ppid = parent.getId();
			}
		}
		
		request.setAttribute("ppid", ppid);
		
		return mapping.findForward("index");
	}
}

5.在jsp页面中使用pager-taglib插件完成分页,以下是分页显示代码

<pg:pager url="org.do" items="${pm.total }" export="currentPageNumber=pageNumber">
	<pg:param name="parentId"/>
	<pg:first>
		<a href="${pageUrl}">首页</a>
	</pg:first>
	<pg:prev>
		<a href="${pageUrl }">前页</a>
	</pg:prev>
	<pg:pages>
		<c:choose>
			<c:when test="${currentPageNumber eq pageNumber }">
			<font color="red">${pageNumber }</font>
			</c:when>
			<c:otherwise>
				<a href="${pageUrl }">${pageNumber }</a>
			</c:otherwise>
		</c:choose>
	</pg:pages>
	<pg:next>
		<a href="${pageUrl }">后页</a>
	</pg:next>
	<pg:last>
		<a href="${pageUrl }">尾页</a>
	</pg:last>
</pg:pager>







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值