基于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的一般使用说明:
  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这个页码指定的那一页的最后一行的索引值





pager-taglib插件进行普通分页的更多相关文章

  1. [jQuery]jQuery DataTables插件自定义Ajax分页实现

    前言 昨天在博客园的博问上帮一位园友解决了一个问题,我觉得有必要记录一下,万一有人也遇上了呢. 问题描述 园友是做前端的,产品经理要求他使用jQuery DataTables插件显示一个列表,要实现分 ...

  2. JSP分页之结合Bootstrap分页插件进行简单分页

    结合Bootstrap的分页插件实现分页,其中策略是每次显示5个按钮,然后根据当前页的不同来进行不同的显示: 1. 当前页<3,如果当前页大于5页就显示前五页,不然就显示1~totalPage. ...

  3. jquery自定义插件来实现分页的效果

    本节将介绍如何定义自己的jquery插入,实现分页效果,话不多说,.看看达到的效果: 分页插件 实现的代码例如以下: <!DOCTYPE HTML PUBLIC "-//W3C//DT ...

  4. SSM 使用 mybatis 分页插件 pagehepler 实现分页

    使用分页插件的原因,简化了sql代码的写法,实现较好的物理分页,比写一段完整的分页sql代码,也能减少了误差性. Mybatis分页插件 demo 项目地址:https://gitee.com/fre ...

  5. PageHelper分页插件及通用分页js

     分页概述 1.物理分页 物理分页依赖的是某一物理实体,这个物理实体就是数据库,比如MySQL数据库提供了limit关键字,程序员只需要编写带有limit关键字的SQL语句,数据库返回的就是分页结果. ...

  6. SpringBoot 使用 MyBatis 分页插件 PageHelper 进行分页查询

    前言:本文档使用的是 SpringBoot,如果是 Spring 还需要在 MyBatis 配置 xml 中配置拦截器,并且 PageHelper 是针对 MyBatis 的,MyBatis 的集成不 ...

  7. 插件PageHelper实现分页查询

    一,需求: CommonQuery--PyQueryBean PyQueryBean:鹏飞历史记录查询,以往哪些人对征信进行了查询.CommonQuery:查询条件:根据查询人(umName).被查询 ...

  8. jquery插件pagination实现分页

    1.效果 2.HTML代码 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind=" ...

  9. mybatis插件机制及分页插件原理

    MyBatis 插件原理与自定义插件: MyBatis 通过提供插件机制,让我们可以根据自己的需要去增强MyBatis 的功能.需要注意的是,如果没有完全理解MyBatis 的运行原理和插件的工作方式 ...

随机推荐

  1. C#中的Virtual、Override和new关键词理解

    来源:http://blog.csdn.net/jackiezhw/article/details/2673992 在 C# 中,派生类可以包含与基类方法同名的方法. 基类方法必须定义为 virtua ...

  2. 设计模式C#(一)

    引言 模式(pattern) 一种方案,利用这种方案 完成某种工作. 一种途径,通过这种途径达到某个目的. 一种技术,利用他有效的完成某项工作. 某些领域的从业人员会产生该领域的习惯用语(行话),用语 ...

  3. android版本 busybox

    http://www.busybox.net/downloads/binaries/1.21.1/  根据不同的平台选择busybox已经编译好的

  4. VS2010+PCL+openni配置

    PCL中文论坛:http://www.pclcn.org/bbs/forum.php 1.安装 pcl 的完全安装包可以到: http://pointclouds.org/downloads/wind ...

  5. 问题:FF中把UL下的LI设为左浮动UL的背景色就没有了?

    因为容器的子元素设置浮动后, 内容移出了文档流!  解决办法: 1.给个overflow:hidden;作为闭合浮动元素2.设定UL 一个固定的高度 下面是一些与之相关的解决办法,参考文章<那些 ...

  6. HBase性能优化方法总结(一):表的设计

    本文主要是从HBase应用程序设计与开发的角度,总结几种常用的性能优化方法.有关HBase系统配置级别的优化,可参考:淘宝Ken Wu同学的博客. 下面是本文总结的第一部分内容:表的设计相关的优化方法 ...

  7. HDU 5768 Lucky7 (容斥原理 + 中国剩余定理 + 状态压缩 + 带膜乘法)

    题意:……应该不用我说了,看起来就很容斥原理,很中国剩余定理…… 方法:因为题目中的n最大是15,使用状态压缩可以将所有的组合都举出来,然后再拆开成数组,进行中国剩余定理的运算,中国剩余定理能够求出同 ...

  8. angularJS 判断

    判断语句: ng-switch on ng-switch-when ng-switch-when ng-if=”person.sex==1“ <ul> <li ng-repeat=” ...

  9. C# devExpress GridControl 统计行总数

    dev我不怎么会用,边学边记: 如果要在gridControl 页面底部统计记录总数只需两步: 1:设置显示gridControl页脚 2,.设置统计列: DevExpress.XtraGrid.Co ...

  10. hdu_5418_Victor and World(状压DP+Floyd)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5418 题意:给你n个点,和一些边,找一条路径经过全部的点,并回到起点,问最小的花费是多少, 题解:m& ...