`
lestang
  • 浏览: 39497 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Pager-taglib分页二

阅读更多

前两天只是把这个分页的代码传了上去,每页写太多的东西
况且本人文笔不是很好,误怪!

这个是我个人对分页的解决方案,其实就是在数据库底层做了分页查询
这套解决方案,是按照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. }  
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.   
  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. }  
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.   
  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. }  
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.   
  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. }  
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中的配置如下

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>  
<!-- 配置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.        
  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>  
  <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.iteye.com/blog/293480

分享到:
评论

相关推荐

    使用pager-taglib分页完整例子

    下面我们将详细探讨如何使用pager-taglib分页以及其主要特性。 首先,`pager-taglib`的核心在于其提供的自定义JSP标签,这些标签简化了分页界面的创建。例如,`&lt;pager:pagelist&gt;`用于显示分页链接,`&lt;pager:page&gt;`...

    pager-taglib分页标签

    `pager-taglib`是一个专为JSP页面设计的分页标签库,它简化了在JSP中实现分页的过程。下面将详细介绍`pager-taglib`的安装、使用方法以及其核心知识点。 ### 1. `pager-taglib`简介 `pager-taglib`是一个开源的JSP...

    Pager-taglib页面分页示例

    **Pager-taglib页面分页示例** 在Java Web开发中,数据量大的时候,分页显示是非常必要的。Pager-taglib就是一个专门用于实现页面分页功能的JSP标签库,它可以帮助开发者快速、方便地在页面上展示分页链接。本项目...

    pager-taglib分页jar包

    **标题解析:**"pager-taglib分页jar包"指的是一个专门为JavaServer Pages (JSP) 开发的分页库,它包含了一个名为`pager-taglib`的Java Archive (JAR) 文件。这个JAR包提供了自定义的JSP标签,帮助开发者在网页上...

    pager-taglib 分页框架+附带例子

    `pager-taglib` 是一个用于网页分页功能的Java标签库,它简化了在JSP页面中实现分页展示数据的过程。这个框架旨在提高开发效率,提供易用的API和直观的标签语法,使得开发者无需编写大量的HTML和Java代码就能实现...

    pager-taglib.jar包下载

    `pager-taglib.jar`是一个专为Java Web应用设计的分页框架,它提供了便捷的分页标签库,使得开发者能快速实现页面上的分页功能。 **描述:“pager-taglib.jar包下载.很方便的分页框架。这是jar包,希望能帮到大家”...

    pager-taglib 分页扩展实例

    pager-taglib 是个很好的jsp分页标签,使用它结合jstl可以实现灵活的分页导航功能。在实际的开发中post方式的提交比较常见,本人做了一个比较通用的基于post方式的一个应用。主要实现一下功能: 1.添加输入跳转、每...

    pager-taglib jar 和 tld 以及使用说明

    `pager-taglib`是一个用于实现分页的自定义标签库,它通过JSP标签来简化分页逻辑的编写。本篇文章将详细解释`pager-taglib.jar`和`tld`文件的用途,以及如何在项目中使用它们。 1. **什么是`pager-taglib.jar`?** ...

    pager-taglib-2.0

    2. **配置TLD**:在Web应用的WEB-INF目录下创建`taglib.tld` 文件,定义Pager-Taglib的URI和标签库描述符。这将告诉JSP编译器如何解析和处理标签。 3. **使用JSP标签**:在JSP页面中,你可以使用如下的标签语法来...

    pager-taglib-2.0.rar

    "pager-taglib-2.0" 是一个强大且灵活的分页标记库,它简化了Web开发中的分页实现,使得开发者能够快速地构建出类似大型网站的分页功能。其易于集成、高度定制化和良好的性能表现,使得它成为Java Web开发中的一个...

    pager-taglib 分页标签使用

    `pager-taglib`是Java Web开发中常用的分页标签库,它简化了在JSP页面上实现分页功能的过程。这个标签库通常与Spring MVC、Struts2等框架结合使用,提供了一种声明式的方式来展示数据分页。下面将详细解释`pager-...

    pager-taglib分页方法

    **Pager-taglib分页方法详解** Pager-taglib是Java Web开发中一种常用的分页标签库,它极大地简化了在JSP页面中实现分页功能的过程。这个标签库通常与Servlet和JSP一起使用,尤其在大数据量展示时,提供用户友好的...

    pager-taglib-2.0及使用方法

    Pager Taglib是Java Web开发中的一个强大工具,主要用于实现页面的分页功能。它提供了一组自定义的JSP标签,简化了在网页上创建分页链接的过程,使得开发者可以更加专注于业务逻辑,而不是分页的实现细节。Pager ...

    pager-taglib-2.0 JSP分页组件

    **标题解析:**"pager-taglib-2.0 JSP分页组件" 是一个专用于JSP页面的分页功能的库,版本为2.0。分页是Web应用程序中常见的功能,它允许用户在大量数据中进行导航,通常用于数据库查询结果的展示,如电商网站的商品...

    pager-taglib源码

    这是pager-taglib的官方源码,但在采用官方的pager-taglib分页传输中文参数会出现乱码,所以我采用maven新建一个pager-taglib项目对pager-taglib的源码进行小小的改动,是他支持中文传输,更重要的是把源代码提供给...

    displaytag,pager-taglib 分页包

    Displaytag和Pager-taglib是两个在Java Web开发中常用的分页库,主要用于处理大量数据的显示,提升用户体验,减轻服务器压力。这两个库都是基于JSP标签库(Tag Library)实现的,可以方便地集成到Spring、Struts等...

    pager-taglib分页例子

    在这个“pager-taglib分页例子”中,我们将探讨如何使用`pager-taglib`进行高效且简洁的分页实现。 首先,`pager-taglib`提供了几个预定义的标签,如`&lt;pg:pager&gt;`、`&lt;pg:firstPage&gt;`、`&lt;pg:lastPage&gt;`、`...

    pager-taglib.jar

    利用pager-taglib进行查询分页时需要添加该jar包:pager-taglib.jar

Global site tag (gtag.js) - Google Analytics