这个是我个人对分页的解决方案,其实就是在数据库底层做了分页查询
这套解决方案,是按照MVC的模式来做的,基于STRUTS框架。分为三个部分,表现层用的是JSP,其中用了JSTL和pager taglib做分页;控制层就是用的很传统的Action;底层就用的是Spring+Hibernate。下面分三个部分慢慢说:

说到分页:
1  首先新建一个PageModel类

Java代码
  1. package com.dengmin.oa.utils;
  2. import java.util.List;
  3. public class PageModel {
  4. /**
  5. * 总记录数
  6. */
  7. private int total;
  8. /**
  9. * 当前页的记录集
  10. */
  11. private List datas;
  12. public List getDatas() {
  13. return datas;
  14. }
  15. public void setDatas(List datas) {
  16. this.datas = datas;
  17. }
  18. public int getTotal() {
  19. return total;
  20. }
  21. public void setTotal(int total) {
  22. this.total = total;
  23. }
  24. }
package com.dengmin.oa.utils;import java.util.List;public class PageModel {/*** 总记录数*/private int total;/*** 当前页的记录集*/private List datas;public List getDatas() {return datas;}public void setDatas(List datas) {this.datas = datas;}public int getTotal() {return total;}public void setTotal(int total) {this.total = total;}
}

2  底层是基于Spring+Hibernate来做的。在DAO这一层,为其增加两个方法,底层的分页查询用的是Hibernate提供的分页查询。

Java代码
  1. public interface UserDao {
  2. public void addUser(User user);
  3. /**
  4. *
  5. * @param offset  从第几条记录开始查询
  6. * @param pagesize  每页显示多少条记录
  7. * @return
  8. */
  9. public PageModel findAllUser(int offset, int pagesize);
  10. }
public interface UserDao {public void addUser(User user);/*** * @param offset  从第几条记录开始查询* @param pagesize  每页显示多少条记录* @return*/public PageModel findAllUser(int offset, int pagesize);
}

3  UserDao的实现类

Java代码
  1. public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
  2. public void addUser(User user) {
  3. this.getHibernateTemplate().save(user);
  4. }
  5. public PageModel findAllUser(int offset, int pagesize) {
  6. //得到总记录数
  7. String queryCountHql = "select count(*) from User";
  8. Query query = getSession().createQuery(queryCountHql);
  9. int total = ((Long)query.uniqueResult()).intValue();
  10. List datas = getSession().createQuery("from User")
  11. .setFirstResult(offset)
  12. .setMaxResults(pagesize)
  13. .list();
  14. //得到结果集
  15. PageModel pm = new PageModel();
  16. pm.setTotal(total);
  17. pm.setDatas(datas);
  18. return pm;
  19. }
  20. }
public class UserDaoImpl extends HibernateDaoSupport implements UserDao {public void addUser(User user) {this.getHibernateTemplate().save(user);}public PageModel findAllUser(int offset, int pagesize) {//得到总记录数String queryCountHql = "select count(*) from User";Query query = getSession().createQuery(queryCountHql);int total = ((Long)query.uniqueResult()).intValue();List datas = getSession().createQuery("from User").setFirstResult(offset).setMaxResults(pagesize).list();//得到结果集PageModel pm = new PageModel();pm.setTotal(total);pm.setDatas(datas);return pm;}}

ok!底层的实现工作就做好了

在控制层中UserAction从DispatchAction继承重写它的unspecified方法
通过spring注入UserDao 代码如下:

Java代码
  1. public class UserAction extends DispatchAction {
  2. private UserDao userDao;
  3. @Override
  4. protected ActionForward unspecified(ActionMapping mapping, ActionForm form,
  5. HttpServletRequest request, HttpServletResponse response) throws Exception {
  6. int offset = 0;
  7. try {
  8. offset = Integer.parseInt(request.getParameter("pager.offset"));
  9. } catch (Exception e) {
  10. }
  11. //这里我按照每页显示10条
  12. PageModel pm = userDao.findAllUser(offset, 10);
  13. request.setAttribute("pm", pm);
  14. return mapping.findForward("success");
  15. }
  16. public void setUserDao(UserDao userDao) {
  17. this.userDao = userDao;
  18. }
  19. }
public class UserAction extends DispatchAction {private UserDao userDao;@Overrideprotected ActionForward unspecified(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Exception {int offset = 0; try {offset = Integer.parseInt(request.getParameter("pager.offset"));} catch (Exception e) {}//这里我按照每页显示10条PageModel pm = userDao.findAllUser(offset, 10);request.setAttribute("pm", pm);return mapping.findForward("success");}public void setUserDao(UserDao userDao) {this.userDao = userDao;}}

spring中的配置如下

Java代码
  1. <!-- 配置sessionFactory -->
  2. <bean id="sessionFactory"
  3. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  4. <property name="configLocation">
  5. <value>classpath:hibernate.cfg.xml</value>
  6. </property>
  7. </bean>
  8. <!-- 配置事务管理器 -->
  9. <bean id="transactionManager"
  10. class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  11. <property name="sessionFactory">
  12. <ref bean="sessionFactory" />
  13. </property>
  14. </bean>
  15. <!-- 配置事务的传播特性 -->
  16. <tx:advice id="txAdvice" transaction-manager="transactionManager">
  17. <tx:attributes>
  18. <tx:method name="*" propagation="REQUIRED" />
  19. </tx:attributes>
  20. </tx:advice>
  21. <bean id="userDao" class="com.dengmin.pager.dao.UserDaoImpl">
  22. <property name="sessionFactory" ref="sessionFactory" />
  23. </bean>
  24. <bean name="/userManager"
  25. class="com.dengmin.pager.actions.UserAction" scope="prototype">
  26. <property name="userDao" ref="userDao" />
  27. </bean>
<!-- 配置sessionFactory --><bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="configLocation"><value>classpath:hibernate.cfg.xml</value></property></bean><!-- 配置事务管理器 --><bean id="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory"><ref bean="sessionFactory" /></property></bean><!-- 配置事务的传播特性 --><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="*" propagation="REQUIRED" /></tx:attributes></tx:advice><bean id="userDao" class="com.dengmin.pager.dao.UserDaoImpl"><property name="sessionFactory" ref="sessionFactory" /></bean><bean name="/userManager"class="com.dengmin.pager.actions.UserAction" scope="prototype"><property name="userDao" ref="userDao" /></bean>

最后是jsp页面做数据显示
这里采用了jstl和pager-taglib的标签库
首先将其引入:

Java代码
  1. <%@ taglib prefix="c"  uri="http://java.sun.com/jsp/jstl/core" %>
  2. <%@ taglib prefix="pg" uri="http://jsptags.com/tags/navigation/pager" %>
<%@ taglib prefix="c"  uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="pg" uri="http://jsptags.com/tags/navigation/pager" %>
Html代码
  1. <body>
  2. <h1>User Manager</h1>
  3. <hr/>
  4. <table width="778" border="0" cellPadding="0" cellSpacing="1" bgcolor="#6386d6">
  5. <tr bgcolor="#EFF3F7">
  6. <TD align="center">ID</TD>
  7. <TD align="center">名称</TD>
  8. <TD align="center">密码</TD>
  9. <TD align="center">地址</TD>
  10. <TD align="center">创建时间</TD>
  11. <TD align="center">相关操作</TD>
  12. </tr>
  13. <c:if test="${!empty pm.datas}">
  14. <c:forEach items="${pm.datas}" var="user">
  15. <tr bgcolor="#EFF3F7">
  16. <td align="center">${user.id }</td>
  17. <td align="center">${user.username }</td>
  18. <td align="center">${user.password}</td>
  19. <td align="center">${user.address}</td>
  20. <td align="center">${user.createTime }</td>
  21. <td align="center">
  22. 修改
  23. &nbsp;
  24. 删除</td>
  25. </tr>
  26. </c:forEach>
  27. </c:if>
  28. <c:if test="${empty pm.datas}">
  29. <tr>
  30. <td colspan="5" align="center" bgcolor="#EFF3F7">
  31. 没有找到相应的记录
  32. </td>
  33. </tr>
  34. </c:if>
  35. </table>
  36. <pg:pager url="userManager.do" items="${pm.total}" export="currentPageNumber=pageNumber">
  37. <pg:first>
  38. <a href="${pageUrl}">首页</a>
  39. </pg:first>
  40. <pg:prev>
  41. <a href="${pageUrl }">上一页</a>
  42. </pg:prev>
  43. <pg:pages>
  44. <c:choose>
  45. <c:when test="${currentPageNumber eq pageNumber}">
  46. <font color="red">${pageNumber }</font>
  47. </c:when>
  48. <c:otherwise>
  49. <a href="${pageUrl }">${pageNumber }</a>
  50. </c:otherwise>
  51. </c:choose>
  52. </pg:pages>
  53. <pg:next>
  54. <a href="${pageUrl }">下一页</a>
  55. </pg:next>
  56. <pg:last>
  57. <a href="${pageUrl }">尾页</a>
  58. </pg:last>
  59. </pg:pager>
  60. </body>
  <body><h1>User Manager</h1><hr/><table width="778" border="0" cellPadding="0" cellSpacing="1" bgcolor="#6386d6"><tr bgcolor="#EFF3F7"><TD align="center">ID</TD><TD align="center">名称</TD><TD align="center">密码</TD><TD align="center">地址</TD><TD align="center">创建时间</TD><TD align="center">相关操作</TD></tr><c:if test="${!empty pm.datas}"><c:forEach items="${pm.datas}" var="user"><tr bgcolor="#EFF3F7"><td align="center">${user.id }</td><td align="center">${user.username }</td><td align="center">${user.password}</td><td align="center">${user.address}</td><td align="center">${user.createTime }</td><td align="center">修改&nbsp; 删除</td></tr></c:forEach></c:if><c:if test="${empty pm.datas}"><tr><td colspan="5" align="center" bgcolor="#EFF3F7">没有找到相应的记录</td></tr></c:if></table><pg:pager url="userManager.do" items="${pm.total}" export="currentPageNumber=pageNumber"><pg:first><a href="${pageUrl}">首页</a></pg:first><pg:prev><a href="${pageUrl }">上一页</a></pg:prev><pg:pages><c:choose><c:when test="${currentPageNumber eq pageNumber}"><font color="red">${pageNumber }</font></c:when><c:otherwise><a href="${pageUrl }">${pageNumber }</a></c:otherwise></c:choose></pg:pages><pg:next><a href="${pageUrl }">下一页</a></pg:next><pg:last><a href="${pageUrl }">尾页</a></pg:last>
</pg:pager></body>

预览效果:

最后附上pager-taglib的使用方法

pg:pager【这个标签用来设置分页的总体参数】重要参数说明:
url:分页的链接根地址,pager标签会在这个链接的基础上附加分页参数
items:总记录数,pager标签正是根据这个值来计算分页参数的
maxPageItems:每页显示的行数,默认为10
maxIndexPages:在循环输出页码的时候,最大输出多少个页码,默认是10

pg:first【第一页的标签】重要参数说明:
export变量的意义:
pageUrl - 分页链接URL地址(最重要的export参数)
pageNumber - 页码
firstItem - 首页第一行的索引值
lastItem - 首页最后一行的索引值

pg:pre【上一页标签】重要参数说明:
export变量的意义:
pageUrl - 分页链接URL地址(最重要的export参数)
pageNumber - 页码
firstItem - 前页第一行的索引值
lastItem - 前页最后一行的索引值

pg:next【下一页标签】重要参数说明:
export变量的意义:
pageUrl - 分页链接URL地址(最重要的export参数)
pageNumber - 页码
firstItem - 下页第一行的索引值
lastItem - 下页最后一行的索引值

pg:last重要参数说明:
export变量的意义:
pageUrl - 分页链接URL地址(最重要的export参数)
pageNumber - 页码
firstItem - 尾页第一行的索引值
lastItem - 尾页最后一行的索引值

pg:pages【这个标签用来循环输出页码信息】重要参数说明:
export变量的意义:
pageUrl - 分页链接URL地址(最重要的export参数)
pageNumber - 页码
firstItem - pageNumber这个页码指定的那一页的第一行的索引值
lastItem - pageNumber这个页码指定的那一页的最后一行的索引值

源代码前两天已经上传过了需要的到这里下载http://minzaipiao.javaeye.com/blog/293480

转载于:https://www.cnblogs.com/JemBai/archive/2009/11/16/1603781.html

SSH pager-taglib分页的实现相关推荐

  1. mvc4 html.pager,MVC分页之MvcPager使用详解

    最近刚刚接触MVC不久,因项目中要用到分页,网上找了下资料,最后采用了MvcPager(http://www.webdiyer.com/),支持同步和Ajax异步分页.废话不多说了直接上代码. 一.M ...

  2. mysql pager cat_Pager分页结果问题

    发现一个怪现象,同样的代码,就是切换一个数据源,第一页(首页)都是正常的,但是第二页开始分页效果达不到预期,第二页往后只显示一条数据. 场景是按每页20行数据获取数据 首先,这个在mysql数据库是正 ...

  3. jsp使用自定义标签taglib分页系列——SearchForm - cao_david的专栏 - CSDNBlog

    导读: package com.adroit.nidus.taglib.html; import org.apache.struts.validator.ValidatorForm; /** * Ti ...

  4. java pager_使用pager进行分页

    pager jar网址:http://java2s.com/Code/Jar/t/Downloadtaglibspagejar.htm package com.binary.entity; impor ...

  5. 详解pager-taglib-2.0配合SSH分页

    一. pager-taglib-2.0简介预览. pager-taglib-2.0支持多种风格的分页,打开其源码,可以看到,处理标签的类为: PagerTag,有兴趣的同学可以研究下源码. Simpl ...

  6. java pager,Pager 分页设计

    分页是非常基础又重复度高的功能,不论是前台.后台.或是手机版都有分页的需求,这里介绍Pager及相关代码. Pager是分页数据的封装,必要时需要与其他分页对象适配(PageObject.Pageab ...

  7. Spring3+ibatis (SQL Server)+pager-taglib.tld查询分页的实现

    pager-taglib分页開始~ 查了好多关于分页的技术,终于选定下面方法实现~ 1.首先下载jar包:pager-taglib.jar,pager-taglib.jar放在WEB-INF/lib文 ...

  8. 基于Jquery+Ajax+Json+高效分页

    摘要 分页我相信大家存储过程分页已经很熟悉了,ajax更是耳熟能详了,更别说我们的json,等等. 如果说您没用过这些东东的话,我相信看完这篇博文会对您有帮助的,,如果有任何问题不懂或者有bug没问题 ...

  9. (easyui datagrid+mvc+json)之asp.net分页查询

    最近在做分页查询的功能,在网上也翻看了不少,但是自己的吸收能力就差了好多,而且当时最大的想法就是,怎么就没有我想要的那种,既是easyui的,又要用mvc的架构,还要能够实现底层的分页传值,用.net ...

最新文章

  1. 从ramdisk根文件系统启动Linux
  2. CCNA实验:VLan间路由实验配置 (单臂路由)
  3. R语言:na.fail和na.omit
  4. 安全扫描工具​Nmap引擎理解文档
  5. WiFi 802.11ax
  6. Oracle Buffer Cache的keep、recycle、default pool概念图解
  7. linux命令学习——tar
  8. Gerrit搭建与代码下载
  9. Atitit.软件开发的几大规则,法则,与原则Principle v3
  10. VC++ EasyPR车牌识别
  11. H265 Vs VP9
  12. STC15单片机功能和应用电路
  13. java useragent 360 遨游 火狐_Chrome与火狐修改浏览器User Agent教程
  14. Nodejs 开发最佳实践
  15. DevCon 命令行实用工具可替代设备管理器
  16. sqlserver到Oracle,SQLSERVER到ORACLE的数据库迁移
  17. vintage的一点深入思考
  18. CSS3 -- API学习 (2D、3D动画效果)
  19. AssetBundle加载和卸载
  20. 安装opencv和python版本有关吗_python安装opencv_python安装opencv完要安装什么配套吗...

热门文章

  1. 基于SmartQQ协议的QQ聊天机器人-7
  2. HA总结:AWS 网络连接
  3. 实践--课程表(仿超级课程表展示课表)
  4. 使用xshell5 从CentOS主机download资料
  5. 自定义jstl函数标签
  6. 【C语言】两种方式实现冒泡排序算法
  7. setTimeout 第一个参数类型
  8. iOS_Spring自动生成Model,Service,Controller 之 介绍
  9. Java FAQ(1)
  10. 创建java的可执行文件