pager-taglib是一个用jsp标签库实现分页的工具,在它的demo中有实现好的各种常见分页方式,使用时只需pager-taglib.jar包即可,Pager会在给出的URL后面加上"?page.offset="来标识当前偏移量,使用时在jsp页面将pager-taglib的标签库引入:
<%@taglib prefix="pg"uri="http://jsptags.com/tags/navigation/pager" %>
标签介绍
1. <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可选。
2.<pg:param>
用来设置将要加入到URL的参数。使用Name属性指定即可,用于参数传递。
3.<pg:index>
这个标签说明分页条显示的内容,在这里你可以设置各种风格的分页显示方式。
4.<pg:first>
可以导出的值: pageUrl -分页链接URL地址 pageNumber -页码 firstItem -首页第一行的索引值 lastItem -首页最后一行的索引值
第一页标签
- pageUrl - 分页链接URL地址
- pageNumber - 页码
- firstItem - 首页第一行的索引值
- lastItem - 首页最后一行的索引值
5.<pg:pre>
上一页标签
- pageUrl - 分页链接URL地址
- pageNumber - 页码
- firstItem - 前页第一行的索引值
- lastItem - 前页最后一行的索引值
6.<pg:pages>
这个标签用来循环输出页码信息
- pageUrl - 分页链接URL地址
- pageNumber - 页码
- firstItem - pageNumber这个页码指定的那一页的第一行的索引值
- lastItem - pageNumber这个页码指定的那一页的最后一行的索引值
7.<pg:next>
下一页标签
- pageUrl - 分页链接URL地址
- pageNumber - 页码
- firstItem - 下页第一行的索引值
- lastItem - 下页最后一行的索引值
8.<pg:last>
最后一页标签
- pageUrl - 分页链接URL地址
- pageNumber - 页码
- firstItem - 尾页第一行的索引值
- lastItem - 尾页最后一行的索引值
下面是一个示例:
[html] view plaincopyprint?
1. <%@ page language="java" pageEncoding="UTF-8"%>
2. <%@taglib prefix="pg" uri="http://jsptags.com/tags/navigation/pager"%>
3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
4. <html>
5. <head>
6. <title>title</title>
7. </head>
8. <body>
9. <!-- 每个标签可以导出的值参见文档 ,没有的可以用export导出 ,但用export的值也有规定-->
10.<pg:pager items="1000" maxPageItems="10" maxIndexPages="7" export="number"><!-- export可以使用表达式: curpage=number,这样 curpage就相当于number -->
11.<%=number %>
12. <pg:first>
13. <a href="<%=pageUrl %>">首页[<%=pageNumber %>]</a><!-- pageNumber导出当前页的值 -->
14. </pg:first>
15. <pg:prev>
16. <a href="<%=pageUrl %>">上一页</a>
17. </pg:prev>
18. <pg:pages>
19. <%if(number==pageNumber){ %>
20. [<%=pageNumber %>]
21. <%} else { %>
22. <a href="<%=pageUrl %>">[<%=pageNumber %>]</a> <!-- pageUrl pageNumber导出值 -->
23. <%} %>
24. </pg:pages>
25. <pg:next>
26. <a href="<%=pageUrl %>">下一页</a>
27. </pg:next>
28. <pg:last>
29. <a href="<%=pageUrl%>">尾页</a>
30. </pg:last>
31.</pg:pager>
32.</body>
33.</html>
运行结果:
链接地址:http://localhost:8080/msg/testPager.jsp?pager.offset=50
pager-taglib传值乱码:
首先确定不是因为平时url乱码所致(手动设置接收的参数Stringstr = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8")可解决)
pager-taglib使用的是jdk默认的编码,所以传中文时会出现乱码,要重新修改编译源代码可以解决:
建立普通的javaproject命名为pager-taglib,将源码解压后的两个文件拷贝到src下,注意将taglib.tld拷到META-INF下,修改在com\jsptags\navigation\pager下面的PagerTag的addParam(Stringname, String value)中,它原本是采用的URLEncoding.encode(value)方式来对传递的参数进行编码的,修改成为URLEncoding.encode(value, "UTF-8"),打成jar包即可用
下面是一个实际应用的例子:
Pager.java
[java] view plaincopyprint?
1. public class Pager<E> {
2.
3. private int pageSize;//每页显示多少条
4. private int pageOffset;//分页的开始值
5. private int totalRecord;//总共多少条记录
6. private int totalPage;//总共多少页
7. private List<E> datas;//放置具体数据的列表
8.
9. //省略getter setter
10.
11. }
DAO层:
[java] view plaincopyprint?
1. public Pager<User> list(String condition) {
2. int pageOffset = SystemContext.getPageOffset();
3. int pageSize = SystemContext.getPageSize();
4. Connection con = null;
5. PreparedStatement ps = null;
6. ResultSet rs = null;
7. Pager<User> pages = new Pager<User>();
8. List<User> users = new ArrayList<User>();
9. User u = null;
10. try {
11. con = DBUtil.getConnection();
12. String sql = "select * from t_user";
13. String sqlCount = "select count(*) from t_user";
14. if(condition!=null||!"".equals(condition)) {
15. sql+=" where username like '%"+condition+"%' or nickname like '%"+condition+"%'";
16. sqlCount+=" where username like '%"+condition+"%' or nickname like '%"+condition+"%'";
17. }
18. sql+=" limit ?,?";
19. ps = con.prepareStatement(sql);
20. ps.setInt(1, pageOffset);
21. ps.setInt(2, pageSize);
22.
23. rs = ps.executeQuery();
24. while(rs.next()) {
25. u = new User();
26. u.setId(rs.getInt("id"));
27. u.setNickname(rs.getString("nickname"));
28. u.setUsername(rs.getString("username"));
29. }
30. ps = con.prepareStatement(sqlCount);
31. rs = ps.executeQuery();
32. int totalRecord = 0;
33. while(rs.next()) {
34. totalRecord = rs.getInt(1);
35. }
36. int totalPage = (totalRecord-1)/pageSize+1;
37. pages.setPageOffset(pageOffset);
38. pages.setPageSize(pageSize);
39. pages.setTotalPage(totalPage);
40. pages.setTotalRecord(totalRecord);
41. } catch (SQLException e) {
42. e.printStackTrace();
43. } finally {
44. DBUtil.close(rs);
45. DBUtil.close(ps);
46. DBUtil.close(con);
47. }
48. pages.setDatas(users);
49. return pages;
50. }
分页部分pager.jsp:
[html] view plaincopyprint?
1. <%@ page language="java" contentType="text/html; charset=UTF-8"
2. pageEncoding="UTF-8"%>
3. <%@taglib prefix="pg" uri="http://jsptags.com/tags/navigation/pager" %>
4. <%
5. int items = Integer.parseInt(request.getParameter("items"));
6. String params = request.getParameter("params"); //con
7. String v="";
8. if(params==null) params="";
9. if(request.getParameter(params)!=null)
10. v=new String(request.getParameter(params).getBytes("ISO-8859-1"),"utf-8") ;
11. %>
12.<pg:pager maxPageItems="15" items="<%=items%>" export="curPage=pageNumber">
13.
14. <pg:param name="<%=params %>" value="<%=v %>"/>
15.
16.<pg:last>
17. 共<%=items %>记录,共<%=pageNumber %>页,
18.</pg:last>
19. 当前第<%=curPage %>页
20.<pg:first>
21. <a href="<%=pageUrl%>">首页</a>
22.</pg:first>
23.<pg:prev>
24. <a href="<%=pageUrl%>">上一页</a>
25.</pg:prev>
26.<pg:pages>
27.<%
28. if(curPage==pageNumber) {
29. %>
30. [<%=pageNumber%>]
31.<%
32. } else {
33. %>
34. <a href="<%=pageUrl %>"><%=pageNumber %></a>
35.<%
36. }
37. %>
38.</pg:pages>
39.<pg:next>
40. <a href="<%=pageUrl %>">下一页</a>
41.</pg:next>
42.<pg:last>
43. <a href="<%=pageUrl%>">尾页</a>
44.</pg:last>
45.</pg:pager>
在显示数据部分只要调用pager.jsp.传值即可