- 浏览: 107527 次
- 性别:
- 来自: 南充
最新评论
-
zhangzi:
你这是hibernate hql分页
hibernate SQL 分页查询 -
edwardjj1234:
listMyArticle.action这个文件能否说明一下? ...
ssh2分页例子 -
edwardjj1234:
前台页面显示不用c;foreach吗?是在哪里控制页面输出数量 ...
ssh2分页例子 -
yangqjiayou:
大哥,代码传给我一份呗,加上数据库文件哈,谢谢啦3466598 ...
ssh2分页例子 -
wangshunfan:
楼主,在MemberDaoImpl类中
return getH ...
ssh2分页例子
前两天只是把这个分页的代码传了上去,每页写太多的东西
况且本人文笔不是很好,误怪!
这个是我个人对分页的解决方案,其实就是在数据库底层做了分页查询
这套解决方案,是按照MVC的模式来做的,基于STRUTS框架。分为三个部分,表现层用的是JSP,其中用了JSTL和pager taglib做分页;控制层就是用的很传统的Action;底层就用的是Spring+Hibernate。下面分三个部分慢慢说:
说到分页:
1 首先新建一个PageModel类
- 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;
- }
- }
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提供的分页查询。
- public interface UserDao {
- public void addUser(User user);
- /**
- *
- * @param offset 从第几条记录开始查询
- * @param pagesize 每页显示多少条记录
- * @return
- */
- public PageModel findAllUser(int offset, int pagesize);
- }
public interface UserDao { public void addUser(User user); /** * * @param offset 从第几条记录开始查询 * @param pagesize 每页显示多少条记录 * @return */ public PageModel findAllUser(int offset, int pagesize); }
3 UserDao的实现类
- 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;
- }
- }
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 代码如下:
- public class UserAction extends DispatchAction {
- private UserDao userDao;
- @Override
- protected 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;
- }
- }
public class UserAction extends DispatchAction { private UserDao userDao; @Override protected 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中的配置如下
- <!-- 配置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>
<!-- 配置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的标签库
首先将其引入:
- <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- <%@ 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" %>
- <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">
- 修改
-
- 删除</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>
<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"> 修改 删除</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这个页码指定的那一页的最后一行的索引值
评论
Error setting expression 'pager.offset' with value '[Ljava.lang.String;@c7e8af'
ognl.OgnlException: target is null for setProperty(null, "offset", [Ljava.lang.String;@c7e8af)
发表评论
-
江哥读:创业者必看(马云语录)
2011-05-22 11:16 1017不要因为别人的一句话 ... -
LOG4J的配置..实现了输出到控制台、文件、回滚文件、发送日志邮件
2011-01-25 10:28 1439Log4J配置文件实现了输出到控制台、文件、回滚文件、发送 ... -
IE6中用了float:left之后导致margin-left双倍边距的BUG解决方法
2011-01-18 14:32 2834先看css代码:div { float:left; ... -
Hibernate三大类查询总结
2010-07-24 21:15 14012Hibernate目前总共分为三大类查询:cretiria, ... -
JAVA认证考试历年经典面试题目整理
2010-07-23 20:55 8841. java中的异常处理机制的简单和应用。 当Java程序 ... -
JAVA SSH框架
2010-07-23 20:53 2191JAVA SSH框架 JAVA SSH框架在Struts + ... -
Spring Security 安全框架
2010-06-02 13:19 983http://www.family168.com/oa/spr ... -
Eclipse快捷键
2010-05-27 09:52 842Eclipse 快捷键(1) Ctrl+1 快 ... -
Hibernate查询Query By Criterial
2010-05-25 19:35 1851提供的检索方式:(1) ... -
DispatchAction, LookupDispatchAction, MappingDispatchAction深入分析
2010-04-29 18:29 996首先我们来看一下它们三者之间的关系 java.lang.Obj ... -
FCKeditor在struts2中无法上传文件的解决办法
2010-03-31 20:44 1205最近有个项目使用struts2进行开发,同时使用了FCKEdi ... -
java备份和恢复mysql数据库
2010-02-27 12:00 1043package cwnu.cs.ncjzwms.utils; ... -
tomcat设置虚拟域名
2010-01-04 17:17 2205在$tomcat/webapps/下建了个myjsp目录作为我 ... -
mysql数据库同步
2009-12-24 17:16 12751、简要介绍:mysql从3.23.15版本以后提供数据库复制 ... -
http://fykyx521.javaeye.com/blog/517138
2009-11-17 10:20 817http://fykyx521.iteye.com/blog/ ... -
163编辑器
2009-10-31 20:50 1876163Editor编辑器的源代码 ... -
Flex 修改浏览器页面标题
2009-10-12 20:38 3018修改浏览器页面标题2009-01-16 16:23浏览器页面的 ... -
PHP连接数据库
2009-10-02 15:47 970<!DOCTYPE html PUBLIC " ... -
用Flex+Spring+Hibernate写一个登录
2009-09-25 11:26 21841下载支持文件flex-spring.zip 新建FlexL ... -
FLEX和Spring、Hibernate的集成 - Flex+Spring
2009-09-25 11:22 1243remoting-config.xml:<destina ...
相关推荐
为了使用`pager-taglib`,你需要将对应的jar包(通常名为`pager-taglib-x.x.x.jar`)添加到项目的类路径中。这可以通过在`WEB-INF/lib`目录下放入jar包或者在构建工具如Maven或Gradle的依赖管理中进行设置来实现。 ...
1. **引入库**:首先,你需要在项目的类路径中添加`pager-taglib-2.0.jar` 文件。这可以通过将文件放入WEB-INF/lib目录,或者在Maven或Gradle等构建工具中声明依赖来完成。 2. **配置TLD**:在Web应用的WEB-INF目录...
**标题:“pager-taglib.jar包下载”** 在Java Web开发中,分页是常见的功能需求,用于处理大量的数据展示,避免一次性加载所有数据导致页面响应慢或者内存压力过大。`pager-taglib.jar`是一个专为Java Web应用设计...
**Pager-taglib页面分页示例** 在Java Web开发中,数据量大的时候,分页显示是非常必要的。Pager-taglib就是一个专门用于实现页面分页功能的JSP标签库,它可以帮助开发者快速、方便地在页面上展示分页链接。本项目...
"pager-taglib-2.0" 是一个专为此目的设计的实用分页标记库,它能够帮助开发者快速构建出类似Google、Yahoo等知名网站的高质量分页效果。 **什么是Taglib** Taglib,全称JSP Tag Library,是JavaServer Pages(JSP...
在JSP页面中,首先需要引入`pager-taglib`的TLD文件,通常是在`WEB-INF`目录下创建一个`taglibs`目录,然后将`pager.taglib.xml`放入其中,并在JSP页面头部引入: ```jsp <%@ taglib prefix="pg" uri="/WEB-INF/...
- 首先,下载`pager-taglib-2.0.war`文件,这是一个Web应用的归档文件。 - 将`war`文件部署到你的应用服务器(如Tomcat、Jetty等)。这通常可以通过将`war`文件拷贝到服务器的`webapps`目录下完成,服务器会自动解压...
pager-taglib 是个很好的jsp分页标签,使用它结合jstl可以实现灵活的分页导航功能。在实际的开发中post方式的提交比较常见,本人做了一个比较通用的基于post方式的一个应用。主要实现一下功能: 1.添加输入跳转、每...
`pager-taglib`是一个用于实现分页的自定义标签库,它通过JSP标签来简化分页逻辑的编写。本篇文章将详细解释`pager-taglib.jar`和`tld`文件的用途,以及如何在项目中使用它们。 1. **什么是`pager-taglib.jar`?** ...
**标题解析:**"pager-taglib分页jar包"指的是一个专门为JavaServer Pages (JSP) 开发的分页库,它包含了一个名为`pager-taglib`的Java Archive (JAR) 文件。这个JAR包提供了自定义的JSP标签,帮助开发者在网页上...
<taglib-location>/WEB-INF/tld/pager.tld</taglib-location> </taglib> ``` 这将告诉JSP引擎在哪里可以找到Pager Taglib的TLD(Tag Library Descriptor)文件。 ### 3. 使用Pager Taglib标签 Pager Taglib提供了...
"pager-taglib.jar" 是一个Java Web开发中的库文件,主要用于实现分页功能。在Web应用中,当数据量较大时,通常会采用分页显示的方式,以提高用户体验和加载速度。Pager Taglib是一个标签库,它提供了一组自定义JSP...
这是pager-taglib的官方源码,但在采用官方的pager-taglib分页传输中文参数会出现乱码,所以我采用maven新建一个pager-taglib项目对pager-taglib的源码进行小小的改动,是他支持中文传输,更重要的是把源代码提供给...
### pager-taglib 使用指南 #### 一、简介 `pager-taglib` 是一个用于实现网页分页功能的 JSP 标签库。该标签库提供了一系列的标签来帮助开发者简化分页逻辑的编写过程,使其能够更加高效地展示数据列表。 #### ...
在这个实例中,开发者使用了PagerTaglib库,这是一个基于JSP自定义标签库,用于方便地在网页上实现数据的分页展示。 PagerTaglib库是基于JSTL(JavaServer Pages Standard Tag Library)的扩展,它简化了在JSP页面...
`pager-taglib_jar`文件是一个包含这个标签库的JAR包,它是开发者在项目中引入`pager-taglib`功能所必需的。 `pager-taglib`的核心思想是将分页逻辑与显示逻辑分离,遵循MVC(Model-View-Controller)设计模式。...