使用pager-taglib分页案例

1.分页案例一


1、拷贝pager-taglib.jar包
2、在JSP页面中使用taglib指令引入pager-taglib标签库
3、使用pager-taglib标签库进行分页处理

 

 

传两个值进去:1、pm.totles总记录数 2、pagesize 每页显示页数 3、<pg:param name="parentId"/>传给后台的变量值对(查询条件)

Java代码   收藏代码
  1. <!-- 可以在这里插入分页导航条 -->  
  2.           
  3.           
  4.           
  5. pg:pager url="org.action" items="${pm.totles}"  export="currentPageNumber=pageNumber" maxPageItems="${pagesize}">  
  6.     <pg:param name="parentId"/>  
  7.       
  8.        
  9.     <pg:first>  
  10.         <a href="${pageUrl}">首页</a>  
  11.     </pg:first>  
  12.     <pg:prev>  
  13.         <a href="${pageUrl}">前页</a>  
  14.     </pg:prev>  
  15.     <pg:pages>  
  16.         <c:choose>  
  17.             <c:when test="${currentPageNumber eq pageNumber}">  
  18.                 <font color="red">${pageNumber }</font>  
  19.             </c:when>  
  20.             <c:otherwise>   
  21.                 <a href="${pageUrl}">${pageNumber }</a>  
  22.             </c:otherwise>  
  23.         </c:choose>  
  24.     </pg:pages>  
  25.     <pg:next>  
  26.         <a href="${pageUrl}">后页</a>  
  27.     </pg:next>  
  28.     <pg:last>  
  29.         <a href="${pageUrl}">尾页</a>  
  30.     </pg:last>  
  31. /pg:pager>    

 

struts2的配置文件 变量拦截器中添加 pager\.offset 这个值是页面标签传给后台进行分页的

Xml代码   收藏代码
  1.  <interceptor-ref name="params">  
  2.                   <param name="excludeParams">dojo\..*,^struts\..*,pager\.offset</param>  
  3.                 </interceptor-ref>  

 

 

 定义一个获取分页所需变量的拦截器 获取pagesize 每页数 与 开始记录数pager.offset

 

Java代码   收藏代码
  1. public class PagerInterceptor extends AbstractInterceptor{  
  2.   
  3.     @Override  
  4.     public String intercept(ActionInvocation invocation) throws Exception {  
  5.           
  6.   
  7.         SystemContext.setOffset(getOffset());  
  8.         SystemContext.setPageSize(getPagesize());  
  9.           
  10.           
  11.   
  12.         try{  
  13.             return invocation.invoke();  
  14.         }finally{  
  15.             SystemContext.removeOffset();  
  16.             SystemContext.removePagesize();  
  17.         }  
  18.           
  19.           
  20.           
  21.     }  
  22.   
  23.       
  24.     private int getOffset(){  
  25.         int offset = 0;  
  26.           
  27.         try {  
  28.             offset = Integer.parseInt(ServletActionContext.getRequest().getParameter("pager.offset"));  
  29.         } catch (Exception ignore) {  
  30.         }  
  31.         return offset;  
  32.     }  
  33.       
  34.     private int getPagesize(){  
  35.     int pagesize = 0;  
  36.           
  37.         try {  
  38.             pagesize = Integer.parseInt(ServletActionContext.getRequest().getParameter("pagesize"));  
  39.         } catch (Exception ignore) {  
  40.         }  
  41.           
  42.         if(pagesize==0){  
  43.               
  44.             pagesize=10;  
  45.               
  46.         }  
  47.     //  System.out.println(pagesize);  
  48.         return pagesize;  
  49.     }  
  50.   
  51. }  

 

上面使用了两个ThreadLocal 变量 存储上面的两个值

 

Java代码   收藏代码
  1. public class SystemContext {  
  2.       
  3.     public static ThreadLocal offset = new ThreadLocal();  
  4.       
  5.     public static ThreadLocal pageSize = new ThreadLocal();  
  6.       
  7.     public static int DEFAULT_PAGE_SIZE= 10;   
  8.   
  9.     public static  void setOffset(int _offset){  
  10.           
  11.         offset.set(_offset);  
  12.           
  13.     }  
  14.   
  15.     public static int getOffset(){  
  16.           
  17.         Integer _offset = (Integer)offset.get();  
  18.           
  19.         if( _offset ==null){  
  20.               
  21.             _offset=0;  
  22.         }  
  23.            
  24.          return _offset;  
  25.     }  
  26.       
  27.     public static void removeOffset(){  
  28.         offset.remove();  
  29.     }  
  30.       
  31.       
  32.     public static void setPageSize(int _pageSize){  
  33.           
  34.         pageSize.set(_pageSize);  
  35.     }  
  36.       
  37.     public static int getPageSize(){  
  38.           
  39.         Integer _pageSize= (Integer)pageSize.get();  
  40.           
  41.         if( _pageSize ==null){  
  42.               
  43.             _pageSize=DEFAULT_PAGE_SIZE;  
  44.         }  
  45.            
  46.          return _pageSize;  
  47.        
  48.     }  
  49.       
  50.     public static void removePagesize(){  
  51.         pageSize.remove();  
  52.     }  
  53. }  

 

 

 

 

  通过从threadlocal 中获取分页所需的变量,就可以在业务类中获取这两个变量,避免了在每个action中传值的麻烦

Java代码   收藏代码
  1. public class BaseManager extends HibernateDaoSupport {  
  2.   
  3. ...  
  4.   
  5.   
  6.   
  7. PageMode searchOrgs(String hql, Object[] objects){  
  8. ...       
  9.         int offset  = SystemContext.getOffset();  
  10.         int pageSize = SystemContext.getPageSize();  
  11.           
  12. ...  
  13.     List datas =   query.setFirstResult(offset).setMaxResults(pageSize).list();  
  14. ...  
  15. }  
  16.   
  17.   
  18. }  

 

 

 

 

 

 

 

  为了使用方面将上面的分页标签页面提取出公共的部分

Html代码   收藏代码
  1. <body>  
  2. <pg:pager items="1001" maxPageItems="33" maxIndexPages="20" export="currentPageNumber=pageNumber">  
  3.     <pg:first>  
  4.         <a href="${pageUrl }">首页</a>  
  5.     </pg:first>  
  6.     <pg:prev>  
  7.         <a href="${pageUrl }">前页</a>  
  8.     </pg:prev>  
  9.     <pg:pages>  
  10.         <c:choose>  
  11.             <c:when test="${currentPageNumber eq pageNumber}">  
  12.                 <font color="red">${pageNumber }</font>  
  13.             </c:when>  
  14.             <c:otherwise>  
  15.                 <a href="${pageUrl }">${pageNumber }</a>  
  16.             </c:otherwise>  
  17.         </c:choose>  
  18.     </pg:pages>  
  19.     <pg:next>  
  20.         <a href="${pageUrl }">下页</a>  
  21.     </pg:next>  
  22.     <pg:last>  
  23.         <a href="${pageUrl }">尾页</a>  
  24.     </pg:last>  
  25. </pg:pager>  
  26. </body>  

 

   需要分页的页面只需如下调用:将url 传进去

 

Html代码   收藏代码
  1.         <!-- 可以在这里插入分页导航条 -->  
  2.    <s:include value="/common/pager.jsp">  
  3.         <s:set var="url" value="'org.action'"/>  
  4.       <s:set var="params" value="#{'parentId':null}"/>  
  5.    </s:include>  

 

 

 

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这个页码指定的那一页的最后一行的索引值

 



2.分页案例二

 Web开发中分页是必须应用的技术。在JavaWeb技术中初学者一般会采用SQL语句分页技术,并在这个基础的之上编写分页组件,页面传参数控制层(Servlet或Action)调用分页组件的办法,往往会感觉非常麻烦。

         然而在实际开发中我们一般采用一些第三方的分页框架,可使分页变的相当简单(站在巨人的肩膀上)——而Pager-taglib就是其中的一个选择.

         Pager-taglib实际上是一个Jsp标签库,为在JSP上显示分页信息而设计的一套标签,通过这些标签的不同的组合支持多种风格的分页显示。会形成多种不一样的分页页面,订制自已的风格的分页页面也非常简单。

         接下来我们会对Pager-taglib分页进行一个初步的了解.

 

1、配置环境,拷贝pager-taglib.jar包到lib目录下.

2、在JSP页面中使用taglib指令引入pager-taglib标签库

使用taglib指令导入标签库,如下所示:

//导入分页标签库

<%@tagliburi="http://jsptags.com/tags/navigation/pager"prefix="pg"%>

//导入JSTL标签库

<%@taglibprefix="c"

uri="http://java.sun.com/jsp/jstl/core"%>

这样在页面中就可以使用分页标签了,uri属性值可打开tag-taglib.jarMETA-INF目录中taglib.tld文件中取得

 

3、使用pager-taglib标签库进行分页处理

在处理之前先对pager-taglib的标签结构进行了解.

 

<pg:pager>

<pg:item></pg:item>

<pg:index>

<pg:first></pg:first>

<pg:prev></pg:prev>

<pg:pages></pg:pages>

<pg:next></pg:next>

<pg:last></pg:last>

</pg:index>

</pg:pager>

 

通过以上的标签就可以完成分页的功能,下面是对具体的标签的简单说明.

pg:pager:这个标签用来设置分页的总体参数.

pg:first:第一页的标签.

pg:prev:上一页标签.

pg:next:下一页标签.

pg:last:最后一页标签.

pg:pages:这个标签用来循环输出页码信息.

 

 

接下来通过一个简单的例子来展示一下Pager-taglib(这里只先展示JSP页面,在下一篇文章中会进行整体展示)

[html]  view plain copy print ?
  1. <span style="font-size:18px;">  <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>  
  2.     <%  
  3.         String path = request.getContextPath();  
  4.         String basePath = request.getScheme() + "://"  
  5.                 + request.getServerName() + ":" + request.getServerPort()  
  6.                 + path + "/";  
  7.     %>  
  8.     <%@include file="/common/common.jsp"%>  
  9.     <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  10.     <html>  
  11.     <head>  
  12.     <base href="<%=basePath%>">  
  13.       
  14.     <title>分页处理演示</title>  
  15.     <meta http-equiv="pragma" content="no-cache">  
  16.     <meta http-equiv="cache-control" content="no-cache">  
  17.     <meta http-equiv="expires" content="0">  
  18.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  19.     <meta http-equiv="description" content="This is my page">  
  20.     <!-- 
  21.         <link rel="stylesheet" type="text/css" href="styles.css"> 
  22.         -->  
  23.     </head>  
  24.       
  25.     <body>  
  26.         <pg:pager items="1001" export="currentPageNumber=pageNumber">  
  27.             <!-- 首页 -->  
  28.             <pg:first>  
  29.                 <!-- 生成链接 -->  
  30.                 <a href="${pageUrl }">首页</a>  
  31.       
  32.             </pg:first>  
  33.             <pg:prev>  
  34.                 <a href="${pageUrl }">前一页</a>  
  35.             </pg:prev>  
  36.             <pg:pages>  
  37.                 <c:choose>  
  38.                     <c:when test="${currentPageNumber eq pageNumber }">  
  39.                         <font color="red">${pageNumber }</font>  
  40.                     </c:when>  
  41.                     <c:otherwise>  
  42.                         <a href="${pageUrl }">${pageNumber }</a>  
  43.                     </c:otherwise>  
  44.                 </c:choose>  
  45.       
  46.             </pg:pages>  
  47.             <pg:next>  
  48.                 <a href="${pageUrl }">后一页</a>  
  49.             </pg:next>  
  50.             <pg:last>  
  51.                 <a href="${pageUrl }">尾页</a>  
  52.             </pg:last>  
  53.         </pg:pager>  
  54.     </body>  
  55.     </html>  
  56. </span>  


 

运行效果

计算机生成了可选文字:首互前一页业业丝业丝笠业丝迎旦101屋互

 

         以上内容是对Pager-taglib 的基本使用介绍,接下来的文章会对Pager-taglib在项目中的使用进行详细的介绍.




3.分页案例三


pager-taglib是一个用jsp标签库实现分页的工具,在它的demo中有实现好的各种常见分页方式,使用时只需pager-taglib.jar包即可,Pager会在给出的URL后面加上"?page.offset="来标识当前偏移量,使用时在jsp页面将pager-taglib的标签库引入:   

<%@ taglib prefix="pg" uri="http://jsptags.com/tags/navigation/pager" %>  

标签介绍
<pg:pager>:一切子标签都在它里面工作

<pg:pager  items="int" maxItems="int" maxPageItems="int" maxIndexPages="int"  export="expression" scope="page|request" 省略>

items:总记录数
maxPageItems:每页显示的行数,默认为10
maxIndexPages:最大输出的页码数
export:这个属性是让标签给你暴露什么变量,当然这些变量是有选择的,如在Pager标签里,可以暴露出来的变量有pageOffset及pageNumber(参见文档),即页码偏移量及页码。通过这两个变量名,可以在Jsp或Java里面从Request里获得。 Export属性接受的值还有表达式,如currentPage=pageNumber表示,把pageNumber的值暴露出来,并赋给一个叫 CurrentPage的变量,这个变量将被保存到Request中,在Jsp或Java中可以得到。scope:有Reuqest、page可选。
<pg:param>设置加入到URL的参数如  <pg:param name=" pagesize " value="5" /> 

pg:first 首页标签
可以导出的值: pageUrl - 分页链接URL地址    pageNumber - 页码   firstItem - 首页第一行的索引值   lastItem - 首页最后一行的索引值 
pg:pre上一页 
pg:next下一页
pg:last 尾页
pg:pages 循环输出页码 

下面是一个示例:

[html]  view plain copy
  1. <%@ page language="java" pageEncoding="UTF-8"%>  
  2. <%@taglib prefix="pg" uri="http://jsptags.com/tags/navigation/pager"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <title>title</title>  
  7. </head>  
  8. <body>  
  9. <!-- 每个标签可以导出的值参见文档 ,没有的可以用export导出 ,但用export的值也有规定-->   
  10. <pg:pager items="1000" maxPageItems="10" maxIndexPages="7" export="number"><!-- export可以使用表达式: curpage=number,这样 curpage就相当于number -->  
  11. <%=number %>  
  12.     <pg:first>  
  13.         <a href="<%=pageUrl %>">首页[<%=pageNumber %>]</a><!-- pageNumber导出当前页的值 -->  
  14.     </pg:first>  
  15.     <pg:prev>  
  16.         <a href="<%=pageUrl %>">上一页</a>     
  17.     </pg:prev>  
  18.     <pg:pages>  
  19.     <%if(number==pageNumber){ %>  
  20.         [<%=pageNumber %>]  
  21.     <%} else { %>  
  22.         <a href="<%=pageUrl %>">[<%=pageNumber %>]</a> <!-- pageUrl pageNumber导出值 -->  
  23.     <%} %>  
  24.     </pg:pages>  
  25.     <pg:next>  
  26.         <a href="<%=pageUrl %>">下一页</a>  
  27.     </pg:next>  
  28.     <pg:last>  
  29.         <a href="<%=pageUrl%>">尾页</a>  
  30.     </pg:last>  
  31. </pg:pager>  
  32. </body>  
  33. </html>  
运行结果:


链接地址:http://localhost:8080/msg/testPager.jsp?pager.offset=50

pager-taglib传值 乱码:

首先确定不是因为平时url乱码所致(手动设置接收的参数String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8")可解决)

pager-taglib使用的是jdk默认的编码,所以传中文时会出现乱码,要重新修改编译源代码可以解决:
建立普通的java project命名为pager-taglib,将源码解压后的两个文件拷贝到src下,注意将taglib.tld拷到META-INF下,修改在com\jsptags\navigation\pager下面的PagerTag的addParam(String name, String value)中,它原本是采用的URLEncoding.encode(value)方式来对传递的参数进行编码的,修改成为 URLEncoding.encode(value, "UTF-8"),打成jar包即可用

下面是一个实际应用的例子:

Pager.java

[java]  view plain copy
  1. public class Pager<E> {  
  2.       
  3.     private int pageSize;//每页显示多少条  
  4.     private int pageOffset;//分页的开始值  
  5.     private int totalRecord;//总共多少条记录  
  6.     private int totalPage;//总共多少页  
  7.     private List<E> datas;//放置具体数据的列表  
  8.       
  9.     //省略getter setter  
  10.       
  11. }  
DAO层:

[java]  view plain copy
  1. public Pager<User> list(String condition) {  
  2.         int pageOffset = SystemContext.getPageOffset();  
  3.         int pageSize = SystemContext.getPageSize();  
  4.         Connection con = null;  
  5.         PreparedStatement ps = null;  
  6.         ResultSet rs = null;  
  7.         Pager<User> pages = new Pager<User>();  
  8.         List<User> users = new ArrayList<User>();  
  9.         User u = null;  
  10.         try {  
  11.             con = DBUtil.getConnection();  
  12.             String sql = "select * from t_user";  
  13.             String sqlCount = "select count(*) from t_user";  
  14.             if(condition!=null||!"".equals(condition)) {  
  15.                 sql+=" where username like '%"+condition+"%' or nickname like '%"+condition+"%'";  
  16.                 sqlCount+=" where username like '%"+condition+"%' or nickname like '%"+condition+"%'";  
  17.             }  
  18.             sql+=" limit ?,?";  
  19.             ps = con.prepareStatement(sql);  
  20.             ps.setInt(1, pageOffset);  
  21.             ps.setInt(2, pageSize);  
  22.               
  23.             rs = ps.executeQuery();  
  24.             while(rs.next()) {  
  25.                 u = new User();  
  26.                 u.setId(rs.getInt("id"));  
  27.                 u.setNickname(rs.getString("nickname"));  
  28.                 u.setUsername(rs.getString("username"));  
  29.             }  
  30.             ps = con.prepareStatement(sqlCount);  
  31.             rs = ps.executeQuery();  
  32.             int totalRecord = 0;  
  33.             while(rs.next()) {  
  34.                 totalRecord = rs.getInt(1);  
  35.             }  
  36.             int totalPage = (totalRecord-1)/pageSize+1;  
  37.             pages.setPageOffset(pageOffset);  
  38.             pages.setPageSize(pageSize);  
  39.             pages.setTotalPage(totalPage);  
  40.             pages.setTotalRecord(totalRecord);  
  41.         } catch (SQLException e) {  
  42.             e.printStackTrace();  
  43.         } finally {  
  44.             DBUtil.close(rs);  
  45.             DBUtil.close(ps);  
  46.             DBUtil.close(con);  
  47.         }  
  48.         pages.setDatas(users);  
  49.         return pages;  
  50.     }  

分页部分pager.jsp:

[html]  view plain copy
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <%@taglib prefix="pg" uri="http://jsptags.com/tags/navigation/pager" %>  
  4. <%  
  5.     int items = Integer.parseInt(request.getParameter("items"));  
  6.     String params = request.getParameter("params"); //con  
  7.     String v="";  
  8.     if(params==null) params="";  
  9.     if(request.getParameter(params)!=null)  
  10.         v=new String(request.getParameter(params).getBytes("ISO-8859-1"),"utf-8") ;  
  11. %>  
  12. <pg:pager maxPageItems="15" items="<%=items%>" export="curPage=pageNumber">  
  13.   
  14.     <pg:param name="<%=params %>" value="<%=v %>"/>  
  15.   
  16. <pg:last>  
  17. <%=items %>记录,共<%=pageNumber %>页,  
  18. </pg:last>  
  19. 当前第<%=curPage %>页  
  20. <pg:first>  
  21.     <a href="<%=pageUrl%>">首页</a>  
  22. </pg:first>  
  23. <pg:prev>  
  24.     <a href="<%=pageUrl%>">上一页</a>  
  25. </pg:prev>  
  26. <pg:pages>  
  27. <%  
  28.     if(curPage==pageNumber) {  
  29. %>  
  30.     [<%=pageNumber%>]  
  31. <%         
  32.     } else {  
  33. %>  
  34.     <a href="<%=pageUrl %>"><%=pageNumber %></a>          
  35. <%         
  36.     }  
  37. %>  
  38. </pg:pages>  
  39. <pg:next>  
  40.     <a href="<%=pageUrl %>">下一页</a>  
  41. </pg:next>  
  42. <pg:last>  
  43.     <a href="<%=pageUrl%>">尾页</a>  
  44. </pg:last>  
  45. </pg:pager>  
在显示数据部分只要调用pager.jsp.传值即可


4.分页案例四  Struts2+Hibernate+pager taglib


现在开始分页:

1.首先导入所需jar包:$_]8}HIAKKWRF`QMK4EH`@5

2.创建两个工具类:PageMode.java(此类用来生成便利需要的集合,及其总的数据行数) MakePageModel.java

package com.util.pageUtil;

import java.util.List; 
/** 
* @author ZhangJunpeng 
*  @declare:此类用来生成便利需要的集合,及其总的数据行数 
**/ 
public class PageMode { 
    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.util.pageUtil; 
import java.util.ArrayList; 
import java.util.List; 
import org.hibernate.Query; 
import org.hibernate.Session; 
import org.hibernate.Transaction;

import com.school.dao.BaseHibernateDAO; 
//import org.springframework.orm.hibernate3.support.HibernateDaoSupport; 
import com.sun.org.apache.bcel.internal.generic.NEW;

/** 
*@method:MakePageModel 
*@author ZhangJunpeng 
**/ 
public class MakePageModel{ 
    /** 
    *@param offset 当前页数 
    *@param pagesize 每页显示的行数 
    *@param objName 传入要传入对象的名字 
    *@return pageModel pm 
    **/ 
    private BaseHibernateDAO baseHibernateDAO=new BaseHibernateDAO(); 
    public BaseHibernateDAO getBaseHibernateDAO() { 
        return baseHibernateDAO; 
    } 
    public void setBaseHibernateDAO(BaseHibernateDAO baseHibernateDAO) { 
        this.baseHibernateDAO = baseHibernateDAO; 
    } 
    @SuppressWarnings("unchecked") 
    public PageMode makePageModel(int offset, int pagesize,String objName) { 
        String queryCountHql = "select count(*) from "+objName; 
        List datas=new ArrayList(); 
        int totoalPages=0; 
        Session session=baseHibernateDAO.getSession(); 
        Transaction transaction=null; 
        try{ 
        transaction=session.beginTransaction(); 
        Query query = session.createQuery(queryCountHql); 
        totoalPages = ((Integer)query.uniqueResult()).intValue(); 
        System.out.println(">>>1"); 
        datas = session .createQuery("from "+objName) 
                    .setFirstResult(offset) 
                    .setMaxResults(pagesize) 
                    .list(); 
        System.out.println(">>>2"); 
        transaction.commit(); 
        System.out.println(">>>3"+totoalPages); 
        }catch (Exception e) { 
            e.printStackTrace(); 
            transaction.rollback();// TODO: handle exception 
        }finally{ 
//            session.close(); 
        } 
        PageMode pm = new PageMode(); 
        pm.setTotal(totoalPages); 
        pm.setDatas(datas); 
        return pm; 
    } 
}

3.创建相应的DAO类,实现pageMode的查询(就是返回指定首尾的结果集,及其总的数据数)例如:

/** 
     * 用于分页显示的查询 
     * */ 
    public PageMode findAll(int offset, int pagesize){ 
        String queryCountHql = "select count(*) from Admin"; 
        Query query = getSession().createQuery(queryCountHql); 
        int total = ((Number)query.uniqueResult()).intValue(); 
        List datas = getSession().createQuery("from Admin") 
                    .setFirstResult(offset) 
                    .setMaxResults(pagesize) 
                    .list(); 
        PageMode pm = new PageMode(); 
        pm.setTotal(total); 
        pm.setDatas(datas); 
        return pm; 
    } 

如果是struts,或是struts2的话,在action内需要处理如下数据:(STRUTS2示例)

        int offset = 0; 
        AdminDAO adminDAO = new AdminDAO();//需要查询类的DAO 
        HttpServletRequest request = ServletActionContext.getRequest(); 
        try { 
            if (request.getParameter("pager.offset") == null) {//pager.offset,taglib标签自带的属性 
                  offset = 0; 
                 } else { 
                  offset = Integer.parseInt(request 
                    .getParameter("pager.offset")); 
                 } 
            int maxPageItems;//每页显示行数 
            if(request.getAttribute("maxPageItems")==null){ 
                maxPageItems=10; 
            }else{ 
                maxPageItems = Integer.parseInt(request.getParameter("maxPageItems")); 
            } 
            logger.debug(">>>>"+maxPageItems); 
            PageMode pm = adminDAO.findAll(offset, maxPageItems);//查询PageMode 
            request.setAttribute("admins", pm); //设置范围

            if (logger.isDebugEnabled()) { 
                logger.debug("viewAdmin() - end"); 
            } 
            return "viewAdmin";//转入视图层 
        } catch (Exception e) { 
            logger.error("viewAdmin()", e);

            logger.error(e.getMessage()); 
            return ERROR; 
        }

4.根据返回的pageMode可以保存在指定的范围内,然后逃到页面进行显示数据:

在需要显示分页的地方放入:


       
[java]  view plain copy
  1. <!--别忘记引入插件-->  
  2. <%@ taglib uri="http://jsptags.com/tags/navigation/pager" prefix="pg" %>  
  3. <div>  
  4.         <pg:pager url="forward!viewAdmin.action" maxPageItems="10" items="${admins.total}" export="currentPageNumber=pageNumber">  
  5.         <pg:first>  
  6.             <a href="${pageUrl}" mce_href="${pageUrl}">首页</a>  
  7.         </pg:first>  
  8.         <pg:prev>  
  9.             <a href="${pageUrl }" mce_href="${pageUrl }">上一页</a>  
  10.         </pg:prev>  
  11.         <pg:pages>  
  12.             <c:choose>  
  13.                 <c:when test="${currentPageNumber eq pageNumber}">  
  14.                     <font color="red">${pageNumber }</font>  
  15.                 </c:when>  
  16.                 <c:otherwise>  
  17.                     <a href="${pageUrl }" mce_href="${pageUrl }">${pageNumber }</a>  
  18.                 </c:otherwise>  
  19.             </c:choose>  
  20.         </pg:pages>  
  21.         <pg:next>  
  22.             <a href="${pageUrl }" mce_href="${pageUrl }">下一页</a>  
  23.         </pg:next>  
  24.         <pg:last>  
  25.             <a href="${pageUrl }" mce_href="${pageUrl }">尾页</a>  
  26.         </pg:last>  
  27.     </pg:pager>  
  28.     </div>  
         
    
   

参数:url:所要跳转的action   maxPageItems:每页显示行数   items: 前面在action中保存的PageMode中的 总数据数


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值