SSH pager-taglib分页的实现 具体使用方法 分页pager

2024-05-30 09:58

本文主要是介绍SSH pager-taglib分页的实现 具体使用方法 分页pager,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

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

2  底层是基于Spring+Hibernate来做的。在DAO这一层,为其增加两个方法,底层的分页查询用的是Hibernate提供的分页查询。 
Java代码   收藏代码
  1. public interface UserDao {  
  2.   
  3.     public void addUser(User user);  
  4.   
  5.     /** 
  6.      *  
  7.      * @param offset  从第几条记录开始查询 
  8.      * @param pagesize  每页显示多少条记录 
  9.      * @return 
  10.      */  
  11.     public PageModel findAllUser(int offset, int pagesize);  
  12. }  

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


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

在控制层中UserAction从DispatchAction继承重写它的unspecified方法 
通过spring注入UserDao 代码如下: 
Java代码   收藏代码
  1. public class UserAction extends DispatchAction {  
  2.   
  3.     private UserDao userDao;  
  4.     @Override  
  5.     protected ActionForward unspecified(ActionMapping mapping, ActionForm form,  
  6.             HttpServletRequest request, HttpServletResponse response) throws Exception {  
  7.           
  8.         int offset = 0;   
  9.           
  10.         try {  
  11.             offset = Integer.parseInt(request.getParameter("pager.offset"));  
  12.         } catch (Exception e) {  
  13.         }  
  14.         //这里我按照每页显示10条  
  15.         PageModel pm = userDao.findAllUser(offset, 10);  
  16.         request.setAttribute("pm", pm);  
  17.           
  18.         return mapping.findForward("success");  
  19.     }  
  20.       
  21.     public void setUserDao(UserDao userDao) {  
  22.         this.userDao = userDao;  
  23.     }  
  24.       
  25. }  


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.     <!-- 配置事务的传播特性 -->  
  17.     <tx:advice id="txAdvice" transaction-manager="transactionManager">  
  18.         <tx:attributes>  
  19.             <tx:method name="*" propagation="REQUIRED" />  
  20.         </tx:attributes>  
  21.     </tx:advice>  
  22.   
  23.   
  24. <bean id="userDao" class="com.dengmin.pager.dao.UserDaoImpl">  
  25.         <property name="sessionFactory" ref="sessionFactory" />  
  26.     </bean>  
  27.   
  28.     <bean name="/userManager"  
  29.         class="com.dengmin.pager.actions.UserAction" scope="prototype">  
  30.         <property name="userDao" ref="userDao" />  
  31.     </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" %>  


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

这篇关于SSH pager-taglib分页的实现 具体使用方法 分页pager的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1016098

相关文章

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Java判断多个时间段是否重合的方法小结

《Java判断多个时间段是否重合的方法小结》这篇文章主要为大家详细介绍了Java中判断多个时间段是否重合的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录判断多个时间段是否有间隔判断时间段集合是否与某时间段重合判断多个时间段是否有间隔实体类内容public class D

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

Java覆盖第三方jar包中的某一个类的实现方法

《Java覆盖第三方jar包中的某一个类的实现方法》在我们日常的开发中,经常需要使用第三方的jar包,有时候我们会发现第三方的jar包中的某一个类有问题,或者我们需要定制化修改其中的逻辑,那么应该如何... 目录一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理一、需求描述需求描述如下:需要在