pager-taglib插件进行普通分页

时间:2023-06-08 10:48:26
    基于Spring+ibatis+Struts+pager-taglib分页技术

pager-taglib是一款支持多种风格的分页显示。

    先简单介绍一下Pager-taglib。实际上,她是一个Jsp标签库,为在JSP上显示分页信息而设计的一套标签,通过这些标签的不同的组合,会形成
多种不一样的分页页面,风格各异,她自带的DEMO就有七种左右的分页风格,包括Google的分页风格。而需要订制自已的风格的分页页面也非常简单。
      接触的当天、匆匆看了下Demo和文档,发现这个很早(2002年最新版一直到现在)就已经有的东西,似 乎比较擅长显示端分页。如,把所有的数据传到页面,通过参数设定页面大小等,可能得到很完美的分页效果。
    这里的分页是通过数据库来实现的,形如
  1. select * from user limit 0, 10
下面这个简单的例子介绍他的使用。
首先是ibatis中的mapper文件
  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4. <mapper namespace="com.csr.web.domain.User">
  5. <resultMap type="com.csr.web.domain.User" id="userResult">
  6. <result property="id" column="id" jdbcType="INTEGER" javaType="java.lang.Integer" />
  7. <result property="username" column="username" />
  8. <result property="password" column="password" />
  9. <result property="email" column="email" />
  10. </resultMap>
  11. <select id="findUserPage" resultMap="userResult">
  12. select * from user limit #{_parameter.offset,jdbcType=INTEGER},#{_parameter.pagesize,jdbcType=INTEGER}
  13. </select>
  14. <select id="findUserCount" resultType="int">
  15. select count(*) from user
  16. </select>
  17. </mapper>
我的userdaoImpl实现部分
  1. @Repository
  2. public class UserDaoImpl implements UserDao {
  3. private final String FIND_USER_COUNT = "findUserCount";
  4. private final String FIND_USER_PAGE = "findUserPage";
  5. @Autowired
  6. private SqlSessionTemplate sqlSessionTemplate;

  7. public List<User> findAllUser(Pager page) {
  8. return sqlSessionTemplate.selectList(FIND_USER_PAGE, page);
  9. }
  10. public int findUserCount() {
  11. return sqlSessionTemplate.selectOne(FIND_USER_COUNT);
  12. }
  13. }
userserviceImp实现部分
  1. @Service
  2. @Transactional
  3. public class UserServiceImpl implements UserService {
  4. @Autowired
  5. private UserDao userDao;
  6. public List<User> findAllUser(Pager page) {
  7. return userDao.findAllUser(page);
  8. }
  9. public int findUserCount() {
  10. return userDao.findUserCount();
  11. }
  12. }
userAction部分
  1. @Controller
  2. @Scope("prototype")
  3. public class UserAction extends ActionSupport {
  4. @Autowired
  5. private UserService userService;
  6. private User user;
  7. private List<User> userList;
  8. private PageModel pm ;
  9. private Pager pager;
  10. public Pager getPager() {
  11. return pager;
  12. }
  13. public void setPager(Pager pager) {
  14. this.pager = pager;
  15. }
  16. public PageModel getPm() {
  17. return pm;
  18. }
  19. public void setPm(PageModel pm) {
  20. this.pm = pm;
  21. }
  22. public User getUser() {
  23. return user;
  24. }
  25. public void setUser(User user) {
  26. this.user = user;
  27. }
  28. public List<User> getUserList() {
  29. return userList;
  30. }
  31. public void setUserList(List<User> userList) {
  32. this.userList = userList;
  33. }
  34. public String queryAllUser() {
  35. int pagesize=3;
  36. int offset=0;
  37. HttpServletRequest request = ServletActionContext.getRequest();
  38. if(request.getParameter("pager.offset")!=null){
  39. offset=Integer.parseInt(request.getParameter("pager.offset"));
  40. }
  41. Pager page = new Pager();
  42. page.setOffset(offset);
  43. page.setPagesize(pagesize+offset+1);
  44. // userList = userService.findAllUser();
  45. userList = userService.findAllUser(page);
  46. int count = userService.findUserCount();
  47. pm = new PageModel();
  48. pm.setDatas(userList);
  49. pm.setTotal(count);
  50. return "userList";
  51. }
  52. }
paper分页工具类
  1. public class Pager implements Serializable {
  2. private static final long serialVersionUID = 1L;
  3. private int pagesize;
  4. private int offset;
  5. public int getPagesize() {
  6. return pagesize;
  7. }
  8. public void setPagesize(int pagesize) {
  9. this.pagesize = pagesize;
  10. }
  11. public int getOffset() {
  12. return offset;
  13. }
  14. public void setOffset(int offset) {
  15. this.offset = offset;
  16. }
  17. }
pageModel工具类
  1. public class PageModel {
  2. private int offset = 0;
  3. private int pagesize = 10;
  4. private int total;
  5. private List datas;
  6. public int getOffset() {
  7. return offset;
  8. }
  9. public void setOffset(int offset) {
  10. this.offset = offset;
  11. }
  12. public int getPagesize() {
  13. return pagesize;
  14. }
  15. public void setPagesize(int pagesize) {
  16. this.pagesize = pagesize;
  17. }
  18. public int getTotal() {
  19. return total;
  20. }
  21. public void setTotal(int total) {
  22. this.total = total;
  23. }
  24. public List getDatas() {
  25. return datas;
  26. }
  27. public void setDatas(List datas) {
  28. this.datas = datas;
  29. }
  30. }
页面jsp文件
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <%
  3. String path = request.getContextPath();
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  5. %>
  6. <%@ taglib prefix="s" uri="/struts-tags"%>
  7. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  8. <%@ taglib prefix="pg" uri="http://jsptags.com/tags/navigation/pager" %>
  9. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  10. <html>
  11. <head>
  12. <base href="<%=basePath%>">
  13. <title>无标题文档</title>
  14. </head>
  15. <body>
  16. <center>
  17. <h2>用户列表</h2>
  18. <!--
  19. <table width="90%" border="1">
  20. <tr>
  21. <th>用户id</th>
  22. <th>用户名称</th>
  23. <th>用户密码</th>
  24. <th>操作</th>
  25. </tr>
  26. <s:iterator value="userList">
  27. <tr>
  28. <td><s:property value="id"/> </td>
  29. <td><s:property value="username"/> </td>
  30. <td><s:property value="password"/> </td>
  31. <td><s:a action="user_updateUI.action"><s:param name="user.id">${id}</s:param>修改</s:a>
  32. <s:a action="user_delete.action"><s:param name="user.id">${id}</s:param>删除</s:a></td>
  33. </tr>
  34. </s:iterator>
  35. </table>
  36. -->
  37. <table width="778" border="0" cellPadding="0" cellSpacing="1" bgcolor="#6386d6">
  38. <tr bgcolor="#EFF3F7">
  39. <TD align="center">ID</TD>
  40. <TD align="center">内容</TD>
  41. <TD align="center">时间</TD>
  42. <TD align="center">相关操作</TD>
  43. </tr>
  44. <c:if test="${!empty pm.datas}">
  45. <c:forEach items="${pm.datas}" var="user">
  46. <tr bgcolor="#EFF3F7">
  47. <td align="center">${user.id }</td>
  48. <td align="center">${user.username }</td>
  49. <td align="center">${user.password}</td>
  50. <td align="center">
  51. 修改
  52. 删除</td>
  53. </tr>
  54. </c:forEach>
  55. </c:if>
  56. <c:if test="${empty pm.datas}">
  57. <tr>
  58. <td colspan="5" align="center" bgcolor="#EFF3F7">
  59. 没有找到相应的记录
  60. </td>
  61. </tr>
  62. </c:if>
  63. </table>
  64. <pg:pager url="user_queryAllUser.action" items="${pm.total}" export="currentPageNumber=pageNumber" maxPageItems="3">
  65. <pg:first>
  66. <a href="${pageUrl}">首页</a>
  67. </pg:first>
  68. <pg:prev>
  69. <a href="${pageUrl }">上一页</a>
  70. </pg:prev>
  71. <pg:pages>
  72. <c:choose>
  73. <c:when test="${currentPageNumber eq pageNumber}">
  74. <font color="red">${pageNumber }</font>
  75. </c:when>
  76. <c:otherwise>
  77. <a href="${pageUrl }">${pageNumber }</a>
  78. </c:otherwise>
  79. </c:choose>
  80. </pg:pages>
  81. <pg:next>
  82. <a href="${pageUrl }">下一页</a>
  83. </pg:next>
  84. <pg:last>
  85. <a href="${pageUrl }">尾页</a>
  86. </pg:last>
  87. </pg:pager>
  88. </center>
  89. </body>
  90. </html>
页面效果
pager-taglib插件进行普通分页 
下面介绍pager-taglib的一般使用说明:
  1. pg:pager【这个标签用来设置分页的总体参数】重要参数说明:
  2. url:分页的链接根地址,pager标签会在这个链接的基础上附加分页参数
  3. items:总记录数,pager标签正是根据这个值来计算分页参数的
  4. maxPageItems:每页显示的行数,默认为10
  5. maxIndexPages:在循环输出页码的时候,最大输出多少个页码,默认是10
  6. pg:first【第一页的标签】重要参数说明:
  7. export变量的意义:
  8. pageUrl - 分页链接URL地址(最重要的export参数)
  9. pageNumber - 页码
  10. firstItem - 首页第一行的索引值
  11. lastItem - 首页最后一行的索引值
  12. pg:pre【上一页标签】重要参数说明:
  13. export变量的意义:
  14. pageUrl - 分页链接URL地址(最重要的export参数)
  15. pageNumber - 页码
  16. firstItem - 前页第一行的索引值
  17. lastItem - 前页最后一行的索引值
  18. pg:next【下一页标签】重要参数说明:
  19. export变量的意义:
  20. pageUrl - 分页链接URL地址(最重要的export参数)
  21. pageNumber - 页码
  22. firstItem - 下页第一行的索引值
  23. lastItem - 下页最后一行的索引值
  24. pg:last【最后一页的标签】重要参数说明:
  25. export变量的意义:
  26. pageUrl - 分页链接URL地址(最重要的export参数)
  27. pageNumber - 页码
  28. firstItem - 尾页第一行的索引值
  29. lastItem - 尾页最后一行的索引值
  30. pg:pages【这个标签用来循环输出页码信息】重要参数说明:
  31. export变量的意义:
  32. pageUrl - 分页链接URL地址(最重要的export参数)
  33. pageNumber - 页码
  34. firstItem - pageNumber这个页码指定的那一页的第一行的索引值
  35. lastItem - pageNumber这个页码指定的那一页的最后一行的索引值