基于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. SQL 查询时间段内的时间

    declare @dt1 as datetime declare @dt2 as datetime set @dt1 = '2008-01-01' set @dt2 = '2009-01-01' ;w ...

  2. POJ 2975 Nim 尼姆博弈

    题目大意:尼姆博弈,求先手必胜的情况数 题目思路:判断 ans=(a[1]^a[2]--^a[n]),求ans^a[i] < a[i]的个数. #include<iostream> ...

  3. 内联函数 inline 漫谈

    内联函数存在的结论是: 引入内联函数是为了解决函数调用效率的问题 由于函数之间的调用,会从一个内存地址调到另外一个内存地址,当函数调用完毕之后还会返回原来函数执行的地址.函数调用会有一定的时间开销,引 ...

  4. lucene-SpanQuery跨度查询基础

    1.跨度查询SpanQuery5个子类 SpanQuery类型                            描述 SpanTermQuery                和其他跨度查询结合 ...

  5. Linux一些命令

    1.查看系统安装软件 rpm -qa  //(不包括绿色安装的软件程序,也就是直接在安装目录中启动的不包括) rpm -qa |grep gcc 参数解释:q ——询问 a —— 查询全部   l — ...

  6. IDL 实现求算 DEM 坡度坡向

    关于坡度坡向的定义,请Google之. 源码: IDL 源码PRO ASPECT_SLOPE,DEM,ASPECT = ASPECT,SLOPE=SLOPE,PIXELSIZE = PIXELSIZE ...

  7. kvm的live-snapshot

    目前项目中已经存在的快照是针对卷的快照,并且需要关机.所以目前的需求有两个:1.不关机快照:2.针对虚拟机的快照,而不是针对券的快照. 由需求所以针对libvirt做了一些实验,纪录如下: 环境:物理 ...

  8. Win7与Ubuntu双系统时卸载Ubuntu的方法

    Win7与Ubuntu双系统时卸载Ubuntu的方法 [日期:2010-03-26] 来源:Ubuntu社区  作者:Ubuntu编辑 [字体:大 中 小]       1. 下载MBRFix工具,放 ...

  9. 在线的代码托管平台 coding.net ===中国扩展版github

    coding.net 是国内新兴的一个项目管理平台,功能主要包括:代码托管.在线运行环境.监控代码质量,兼有一定的社交功能. 在线运行环境支持Java.Ruby.Node.js.PHP.Python. ...

  10. python插入mysql新值

    #Server Connection to MySQL: import MySQLdb conn = MySQLdb.connect(host= "localhost", user ...