在.net中,我们有分页控件。在java中,我们有分页标签库。他们都已经为我们封装好了,我们只需要给这几个参数:数据、当前页码、每页记录数,就能完成分页,所以他们是大同小异的。
今天来说说Pager-taglib 一套jsp分页标签库。
直接看例子吧,那些基础知识看来枯燥无味,我会把他们放到最后,如果例子看不明白,再去看基础知识也不迟。
使用之前,记得拷贝pager-taglib.jar包
建立PageModel类以及实现分页的的Dao方法
①PageModel
public class PageModel {
/**
* 总记录数
* */
private int total;
/**
* 当前页的记录集
* */
private List datas;
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public List getDatas() {
return datas;
}
public void setDatas(List datas) {
this.datas = datas;
}
}
②AlarmDaoImpl.java
public PageModel findAllAlarm(int offset, int pagesize) {
//得到总记录数
String queryCountHql = "select count(*) from Alarm";
Query query = getSession().createQuery(queryCountHql);
int total = ((Long)query.uniqueResult()).intValue();
List datas = getSession().createQuery("from Alarm")
.setFirstResult(offset)
.setMaxResults(pagesize)
.list();
//得到结果集
PageModel pm = new PageModel();
pm.setTotal(total);
pm.setDatas(datas);
return pm;
}
建立Action,增加分页方法
public String pagerTaglib()
{
// pageSize可以通过<pg:paramname="pagesize" value="3" />在页面设定,在action中通过request.getParameter获得
int pagesize=3;
int offset=0;
HttpServletRequest request = ServletActionContext.getRequest();
if(request.getParameter("pager.offset")!=null)
offset=Integer.parseInt(request.getParameter("pager.offset"));
PageModel pm=alarmManager.findAllAlarm(offset, pagesize);
request.setAttribute("pm", pm);
return "pagertaglib";
}
建立JSP测试页面:page.jsp
<!-- 导入JSTL、pagertaglib标签库-->
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="pg" uri="http://jsptags.com/tags/navigation/pager" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>测试 分页</title>
</head>
<body>
<h1>测试 分页</h1>
<hr/>
<table width="778" border="0" cellPadding="0" cellSpacing="1" bgcolor="#6386d6">
<tr bgcolor="#EFF3F7">
<TD align="center">ID</TD>
<TD align="center">内容</TD>
<TD align="center">时间</TD>
<TD align="center">相关操作</TD>
</tr>
<!-- 列表数据栏 -->
<c:if test="${!empty pm.datas}">
<c:forEach items="${pm.datas}" var="alarm">
<tr bgcolor="#EFF3F7">
<td align="center">${alarm.wid }</td>
<td align="center">${alarm.wcontent }</td>
<td align="center">${alarm.wtime}</td>
</tr>
</c:forEach>
</c:if>
<!-- 在列表数据为空的时候,要显示的提示信息 -->
<c:if test="${empty pm.datas}">
<tr>
<td colspan="5" align="center" bgcolor="#EFF3F7">
没有找到相应的记录
</td>
</tr>
</c:if>
</table>
<!-- 在这里插入分页导航条 -->
<pg:pager url="pagerTaglib!pagerTaglib" items="${pm.total}" export="currentPageNumber=pageNumber"maxPageItems="3">
<!-- 对url附加参数
<pg:paramname="parentId"/>
如果有需要在分页之间保持某个参数,则可以使用<pg:param/>标签来定义(如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>
</body>
</html>
可以通过<pg:param>,向URL中加入参数,比如<pg:paramname="pagesize" value="3" />
每次单击页面导航(比如上一页)时,页码的变化,可以在action中通过request.getParameter("pager.offset")得到,只是这些变化Pager-tablib已经为我们封装好了。
一、简介
Pager-taglib2.0是一套jsp分页标签库,可以灵活地实现多种不同风格的分页导航页面,也可以自定义风格样式。并且它可以很好的与服务器分页逻辑分离,它既可以对后台传入的集合进行分页,也可以从数据库中取出要显示那一页的数据。
二、标签介绍
pg:pager这个标签用来设置分页的总体参数,一切分页标签都在其内工作。
url:分页的链接根地址,pager标签会在这个链接的基础上附加分页参数
items:总记录数,pager标签正是根据这个值来计算分页参数的
maxPageItems:每页显示的行数,默认为10
maxIndexPages:在循环输出页码的时候,最大输出多少个页码,默认是10
isOffset:与pg:item配套使用
export:这个属性比较重要,文档也对此作好相对长篇幅的说明。这个属性是让标签给你暴露什么变量,当然这些变量是有选择的,如在Pager标签里,可以暴露出来的变量有pageOffset及pageNumber,即页码偏移量及页码。通过这两个变量名,可以在Jsp或Java里面从Request里获得。Export属性接受的值还有表达式,如currentPage=pageNumber表示,把pageNumber的值暴露出来,并赋给一个叫CurrentPage的变量,这个变量将被保存到Request中,在Jsp或Java中可以得到。
<pg:param>用来设置将要加入到URL的参数。使用Name属性指定即可,用于参数传递。
<pg:index>这个标签说明分页条显示的内容,在这里你可以设置各种风格的分页显示方式。
pg:first第一页标签
pageUrl-分页链接URL地址
pageNumber-页码
firstItem-首页第一行的索引值
lastItem-首页最后一行的索引值
pg:pre上一页标签
pageUrl-分页链接URL地址
pageNumber-页码
firstItem-前页第一行的索引值
lastItem-前页最后一行的索引值
pg:pages这个标签用来循环输出页码信息
pageUrl-分页链接URL地址
pageNumber-页码
firstItem- pageNumber这个页码指定的那一页的第一行的索引值
lastItem- pageNumber这个页码指定的那一页的最后一行的索引值
pg:next下一页标签
pageUrl-分页链接URL地址
pageNumber-页码
firstItem-下页第一行的索引值
lastItem-下页最后一行的索引值
pg:last最后一页标签
pageUrl-分页链接URL地址
pageNumber-页码
firstItem-尾页第一行的索引值
lastItem-尾页最后一行的索引值