您的位置:首页 > 其它

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

2017-03-14 22:22 239 查看
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>


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息