Pager-taglib,是一套分页标签库,可以灵活地实现多种不同风格的分页导航页面,并且可以很好的与服务器分页逻辑分离支持多种风格的分页显示。 通过这些标签的不同的组合,会形成多种不一样的分页页面,风格各异,它自带的DEMO就有七种左右的分页风格,包括Google的分页风格。而需要订制自 已的风格的分页页面也非常简单。
分页方式有两种:
第一种是从Action中得到一个List,在页面上通 过<pg:item>进行自动分页。
第二种是通过把 pageSize,pageNo两参数传给后台进行数据库分页。
pg:pager 【用来设置分页的总体参数】
url:分页的链接根地址,pager标签会在这个链接的基础上附加分页参数
items:总记录数,pager标签正是根据这个值来计算分页参数的
maxPageItems:每页显示的行数,默认为10
maxIndexPages:在循环输出页码的时候,最大输出多少个页码,默认是10
pg:first 【第一页的标签】export参数(相当于直接使用的变量):
pageUrl:分页链接URL地址(最重要的)
pageNumber:页码
firstItem:首页第一行的索引值
lastItem:首页最后一行的索引值
pg:pre 【上一页标签】export参数(相当于直接使用的变量):
pageUrl:分页链接URL地址
pageNumber:页码
firstItem:前页页第一行的索引值
lastItem:前页最后一行的索引值
pg:next 【下一页标签】export参数(相当于直接使用的变量):
pageUrl:分页链接URL地址
pageNumber:页码
firstItem:下页页第一行的索引值
lastItem:下页最后一行的索引值
pg:last 【最后一页标签】export参数(相当于直接使用的变量):
pageUrl:分页链接URL地址
pageNumber:页码
firstItem:尾页页第一行的索引值
lastItem:尾页最后一行的索引值
pa:param 用于设置传递参数的标签
pg:pages 可用于循环输出页码数
基本的设置都已经列出来了,下面是实现代码:
JSP:
<!-- 可以在这里插入分页导航条 -->
<!-- 设置url,使提交的信息经过Action -->
<pg:pager url="org.do" items="${pm.total}" export="currentPageNumber=pageNumber">
<!-- 携带parentId,防止丢失,从而子机构无法分页 -->
<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>
Action:
/**
* 当没有任何参数(方法名)传入时,struts会调用unspecified方法
* 打开机构管理主界面
*/
protected ActionForward unspecified(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//获得页面的参数
//即便是没有传递参数的调教请求过来,form也不会是null
OrgActionForm oaf = (OrgActionForm)form;
//设置firstPage
int offset = 0;
try {
//pager.offset是pager-taglib默认参数
offset = Integer.parseInt(request.getParameter("pager.offset"));
} catch (RuntimeException ignore) {
}
//设置pagesize
int pagesize = 10;
// 获取分好页的机构列表,并传递到界面
request.setAttribute("pm",orgManager.findOrgs(oaf.getParentId(),offset,pagesize));
int ppid = 0;
//parent是对于子机构列表来说
//得到是当前点击的那个机构
if(oaf.getParentId()!=0) {
Organization organization = orgManager.findOrg(oaf.getParentId());
Organization parent = organization.getParent();
if(parent!=null) {
ppid = parent.getId();
}
}
request.setAttribute("ppid", ppid);
return mapping.findForward("index");
}
Model:
/**
* offset:从第几行开始查找
* pagesize:每页显示的数量
*/
public PagerModel findOrgs(int parentId,int offset,int pagesize) {
String selectCountHQL = "select count(*) from Organization o where o.parent is null";
if (parentId != 0) {
selectCountHQL = "select count(*) from Organization o where o.parent.id = " + parentId;
}
//获取总记录数
int total = ((Long)getSession().createQuery(selectCountHQL).uniqueResult()).intValue();
String selectHQL = "select o from Organization o where o.parent is null";
if (parentId != 0) {
selectHQL = "select o from Organization o where o.parent.id = " + parentId;
}
//获取当前页记录
List datas = getSession().createQuery(selectHQL)
.setFirstResult(offset)
.setMaxResults(pagesize)
.list();
PagerModel pm = new PagerModel();
pm.setDatas(datas);
pm.setTotal(total);
return pm;
}