pager-taglib是一个用jsp标签库实现分页的工具,在它的demo中有实现好的各种常见分页方式,使用时只需pager-taglib.jar包即可,Pager会在给出的URL后面加上"?page.offset="来标识当前偏移量,使用时在jsp页面将pager-taglib的标签库引入:
<%@ taglib prefix="pg" uri="http://jsptags.com/tags/navigation/pager" %>
标签介绍
<pg:pager>:一切子标签都在它里面工作
<pg:pager items="int" maxItems="int" maxPageItems="int" maxIndexPages="int" export="expression" scope="page|request" 省略>
items:总记录数
maxPageItems:每页显示的行数,默认为10
maxIndexPages:最大输出的页码数
export:这个属性是让标签给你暴露什么变量,当然这些变量是有选择的,如在Pager标签里,可以暴露出来的变量有pageOffset及pageNumber(参见文档),即页码偏移量及页码。通过这两个变量名,可以在Jsp或Java里面从Request里获得。 Export属性接受的值还有表达式,如currentPage=pageNumber表示,把pageNumber的值暴露出来,并赋给一个叫 CurrentPage的变量,这个变量将被保存到Request中,在Jsp或Java中可以得到。scope:有Reuqest、page可选。
<pg:param>设置加入到URL的参数如 <pg:param name=" pagesize " value="5" />
下面是一个示例:
<%@ page language="java" pageEncoding="UTF-8"%> <%@taglib prefix="pg" uri="http://jsptags.com/tags/navigation/pager"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>title</title> </head> <body> <!-- 每个标签可以导出的值参见文档 ,没有的可以用export导出 ,但用export的值也有规定--> <pg:pager items="1000" maxPageItems="10" maxIndexPages="7" export="number"><!-- export可以使用表达式: curpage=number,这样 curpage就相当于number --> <%=number %> <pg:first> <a href="<%=pageUrl %>">首页[<%=pageNumber %>]</a><!-- pageNumber导出当前页的值 --> </pg:first> <pg:prev> <a href="<%=pageUrl %>">上一页</a> </pg:prev> <pg:pages> <%if(number==pageNumber){ %> [<%=pageNumber %>] <%} else { %> <a href="<%=pageUrl %>">[<%=pageNumber %>]</a> <!-- pageUrl pageNumber导出值 --> <%} %> </pg:pages> <pg:next> <a href="<%=pageUrl %>">下一页</a> </pg:next> <pg:last> <a href="<%=pageUrl%>">尾页</a> </pg:last> </pg:pager> </body> </html>运行结果:
链接地址:http://localhost:8080/msg/testPager.jsp?pager.offset=50
pager-taglib传值 乱码:
首先确定不是因为平时url乱码所致(手动设置接收的参数String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8")可解决)
pager-taglib使用的是jdk默认的编码,所以传中文时会出现乱码,要重新修改编译源代码可以解决:
建立普通的java project命名为pager-taglib,将源码解压后的两个文件拷贝到src下,注意将taglib.tld拷到META-INF下,修改在com\jsptags\navigation\pager下面的PagerTag的addParam(String name, String value)中,它原本是采用的URLEncoding.encode(value)方式来对传递的参数进行编码的,修改成为 URLEncoding.encode(value, "UTF-8"),打成jar包即可用
下面是一个实际应用的例子:
Pager.java
public class Pager<E> { private int pageSize;//每页显示多少条 private int pageOffset;//分页的开始值 private int totalRecord;//总共多少条记录 private int totalPage;//总共多少页 private List<E> datas;//放置具体数据的列表 //省略getter setter }DAO层:
public Pager<User> list(String condition) { int pageOffset = SystemContext.getPageOffset(); int pageSize = SystemContext.getPageSize(); Connection con = null; PreparedStatement ps = null; ResultSet rs = null; Pager<User> pages = new Pager<User>(); List<User> users = new ArrayList<User>(); User u = null; try { con = DBUtil.getConnection(); String sql = "select * from t_user"; String sqlCount = "select count(*) from t_user"; if(condition!=null||!"".equals(condition)) { sql+=" where username like '%"+condition+"%' or nickname like '%"+condition+"%'"; sqlCount+=" where username like '%"+condition+"%' or nickname like '%"+condition+"%'"; } sql+=" limit ?,?"; ps = con.prepareStatement(sql); ps.setInt(1, pageOffset); ps.setInt(2, pageSize); rs = ps.executeQuery(); while(rs.next()) { u = new User(); u.setId(rs.getInt("id")); u.setNickname(rs.getString("nickname")); u.setUsername(rs.getString("username")); } ps = con.prepareStatement(sqlCount); rs = ps.executeQuery(); int totalRecord = 0; while(rs.next()) { totalRecord = rs.getInt(1); } int totalPage = (totalRecord-1)/pageSize+1; pages.setPageOffset(pageOffset); pages.setPageSize(pageSize); pages.setTotalPage(totalPage); pages.setTotalRecord(totalRecord); } catch (SQLException e) { e.printStackTrace(); } finally { DBUtil.close(rs); DBUtil.close(ps); DBUtil.close(con); } pages.setDatas(users); return pages; }
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="pg" uri="http://jsptags.com/tags/navigation/pager" %> <% int items = Integer.parseInt(request.getParameter("items")); String params = request.getParameter("params"); //con String v=""; if(params==null) params=""; if(request.getParameter(params)!=null) v=new String(request.getParameter(params).getBytes("ISO-8859-1"),"utf-8") ; %> <pg:pager maxPageItems="15" items="<%=items%>" export="curPage=pageNumber"> <pg:param name="<%=params %>" value="<%=v %>"/> <pg:last> 共<%=items %>记录,共<%=pageNumber %>页, </pg:last> 当前第<%=curPage %>页 <pg:first> <a href="<%=pageUrl%>">首页</a> </pg:first> <pg:prev> <a href="<%=pageUrl%>">上一页</a> </pg:prev> <pg:pages> <% if(curPage==pageNumber) { %> [<%=pageNumber%>] <% } else { %> <a href="<%=pageUrl %>"><%=pageNumber %></a> <% } %> </pg:pages> <pg:next> <a href="<%=pageUrl %>">下一页</a> </pg:next> <pg:last> <a href="<%=pageUrl%>">尾页</a> </pg:last> </pg:pager>在显示数据部分只要调用pager.jsp.传值即可