一. pager-taglib-2.0简介预览.

pager-taglib-2.0支持多种风格的分页,打开其源码,可以看到,处理标签的类为:

PagerTag,有兴趣的同学可以研究下源码。

Simple:

Text Icon:

JSPTags.com :

AllTheWeb :

AltaVista :

 Google :

Lycos :

Yahoo! :

二.使用pager-taglib

将下载的压缩包解压后:将下列文件对应于我们项目中的文件.

 WEB-INF/lib/
pager-taglib.jar

    WEB-INF/jsp/
pager-taglib.tld
alltheweb.jsp
altavista.jsp
google.jsp
jsptags.jsp
lycos.jsp
simple.jsp
texticon.jsp
yahoo.jsp

    images/
        jsptags.gif
三.新建PageModel类以及修改DAO接口

①PageModel.java

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

②修改DAO,增加public PageModel findAllAlarm(int offset, int pagesize)方法,以及实现类. AlarmDao.java

 
  
  1. public interface AlarmDao {  
  2.  public void add(Alarm alarm);  
  3.  
  4.  public Alarm getAlarm(Integer id);  
  5.  
  6.  public List getAlarmList();  
  7.  
  8.  public void update(Alarm alarm);  
  9.  
  10.  public void delete(Integer id);  
  11.  /**    
  12.      *     
  13.      * @param offset  从第几条记录开始查询    
  14.      * @param pagesize  每页显示多少条记录    
  15.      * @return    
  16.      */    
  17.     public PageModel findAllAlarm(int offset, int pagesize);   
  18.  
  19.  
  20. }  

③实现接口中方法:AlarmDaoImpl.java

 
  
  1. public PageModel findAllAlarm(int offset, int pagesize) {  
  2.       
  3.          //得到总记录数     
  4.         String queryCountHql = "select count(*) from Alarm";     
  5.              
  6.         Query query = getSession().createQuery(queryCountHql);     
  7.         int total = ((Long)query.uniqueResult()).intValue();     
  8.              
  9.         List datas = getSession().createQuery("from Alarm")     
  10.                     .setFirstResult(offset)     
  11.                     .setMaxResults(pagesize)     
  12.                     .list();     
  13.         //得到结果集     
  14.         PageModel pm = new PageModel();     
  15.         pm.setTotal(total);     
  16.         pm.setDatas(datas);     
  17.         return pm;     
  18.  
  19.     } 

④.Services层:public PageModel findAllAlarm(int offset, int pagesize);

⑤Services其实现:AlarmManagerImpl.java

 

 
  
  1. public PageModel findAllAlarm(int offset, int pagesize) {  
  2.         // TODO Auto-generated method stub  
  3.         return alarmDao.findAllAlarm(offset, pagesize);  
  4.     } 

四.修改Action,增加分页方法!

 

 
  
  1. public String pagerTaglib()  
  2.      {  
  3.       int pagesize=3;  
  4.       int offset=0;  
  5.       HttpServletRequest request = ServletActionContext.getRequest();   
  6.       if(request.getParameter("pager.offset")!=null)  
  7.        offset=Integer.parseInt(request.getParameter("pager.offset"));  
  8.         
  9.       PageModel pm=alarmManager.findAllAlarm(offset, pagesize);  
  10.       request.setAttribute("pm", pm);  
  11.       return "pagertaglib";  
  12.      } 

修改struts.xml文件

 

 
  
  1. <action name="pagerTaglib" class="addBean" method="pagerTaglib"> 
  2.    <result name="success">/list.jsp</result> 
  3.    <result name="pagertaglib">/page.jsp</result> 
  4.  </action> 

五.建立JSP测试页面:page.jsp

注意导入:

JSTL标签:

<%@ taglib prefix="c"    uri="http://java.sun.com/jsp/jstl/core" %>  
pagertaglib标签:

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

 
  
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>   
  2. <%@ taglib prefix="c"    uri="http://java.sun.com/jsp/jstl/core" %>   
  3. <%@ taglib prefix="pg" uri="http://jsptags.com/tags/navigation/pager" %>   
  4.  
  5.  
  6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">   
  7. <html>   
  8.     <head>   
  9.         <title>测试 分页</title>   
  10.     </head>   
  11.        
  12.     <body>   
  13.         <h1>测试 分页</h1>   
  14.         <hr/>   
  15.            
  16.         <table width="778" border="0" cellPadding="0" cellSpacing="1" bgcolor="#6386d6">   
  17.         <tr bgcolor="#EFF3F7">   
  18.           <TD align="center">ID</TD>   
  19.           <TD align="center">内容</TD>   
  20.           <TD align="center">时间</TD>   
  21.           <TD align="center">相关操作</TD>   
  22.               
  23.         </tr>   
  24.         <c:if test="${!empty pm.datas}">   
  25.           <c:forEach items="${pm.datas}" var="alarm">   
  26.             <tr bgcolor="#EFF3F7">   
  27.               <td align="center">${alarm.wid }</td>   
  28.               <td align="center">${alarm.wcontent }</td>   
  29.               <td align="center">${alarm.wtime}</td>   
  30.               <td align="center">   
  31.                 修改   
  32.                        
  33.                 删除</td>   
  34.             </tr>   
  35.           </c:forEach>   
  36.           </c:if>   
  37.             <c:if test="${empty pm.datas}">   
  38.          <tr>   
  39.             <td colspan="5" align="center" bgcolor="#EFF3F7">   
  40.             没有找到相应的记录   
  41.             </td>   
  42.          </tr>   
  43.          </c:if>   
  44.         </table>   
  45.         <pg:pager url="pagerTaglib!pagerTaglib" items="${pm.total}" export="currentPageNumber=pageNumber" maxPageItems="3">   
  46.   <pg:first>   
  47.     <a href="${pageUrl}">首页</a>   
  48.   </pg:first>   
  49.   <pg:prev>   
  50.     <a href="${pageUrl }">上一页</a>   
  51.   </pg:prev>   
  52.   <pg:pages>   
  53.     <c:choose>   
  54.       <c:when test="${currentPageNumber eq pageNumber}">   
  55.         <font color="red">${pageNumber }</font>   
  56.       </c:when>   
  57.       <c:otherwise>   
  58.         <a href="${pageUrl }">${pageNumber }</a>   
  59.       </c:otherwise>   
  60.     </c:choose>   
  61.   </pg:pages>   
  62.   <pg:next>   
  63.     <a href="${pageUrl }">下一页</a>   
  64.   </pg:next>   
  65.   <pg:last>   
  66.     <a href="${pageUrl }">尾页</a>   
  67.   </pg:last>   
  68. </pg:pager>   
  69.     </body>   
  70. </html>   

pager-taglib标签库使用:

 

标签名: 简介: 参数说明:
pg:pager 设置分页的总体参数 url:分页的链接根地址,pager标签会在这个链接的基础上附加分页参数
 items:总记录数,pager标签正是根据这个值来计算分页参数的
 maxPageItems:每页显示的行数,默认为10(不写此标签,你会发现分页的条数在小于10的时候显示不出来一些数据。当大于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这个页码指定的那一页的最后一行的索引值

六.结果如图:

页面有点难看,这些数据是PowerDesigner生成的测试数据,很难看,呵呵。

七.换成google分页:关于各种分页页面JSP代码,下载的资料里面包含的有使用文档!替换即可!

 
  
  1.  <pg:pager url="pagerTaglib!pagerTaglib" items="${pm.total}"  index="half-full" export="currentPageNumber=pageNumber" maxPageItems="3"> 
  2.  
  3. <pg:index> 
  4.   <center> 
  5.   <table border=0 cellpadding=0 width=10cellspacing=0> 
  6.   <tr align=center valign=top> 
  7.   <td valign=bottom><font face=arial,sans-serif  
  8.     size=-1>Result Page: </font></td> 
  9.   <pg:prev ifnull="true"> 
  10.     <% if (pageUrl != null) { %> 
  11.       <td align=right><A HREF="<%= pageUrl %>"><IMG 
  12.         SRC=http://www.google.com/nav_previous.gif alt="" border=0><br> 
  13.       <b>Previous</b></A></td> 
  14.     <% } else { %> 
  15.       <td><IMG SRC=http://www.google.com/nav_first.gif alt="" border=0></td> 
  16.     <% } %> 
  17.   </pg:prev> 
  18.   <pg:pages> 
  19.     <% if (pageNumber == currentPageNumber) { %> 
  20.       <td><IMG SRC=http://www.google.com/nav_current.gif alt=""><br> 
  21.       <font color=#A90A08><%= pageNumber %></font></td> 
  22.     <% } else { %> 
  23.       <td><A HREF="<%= pageUrl %>"><IMG 
  24.         SRC=http://www.google.com/nav_page.gif alt="" border=0><br> 
  25.       <%= pageNumber %></A></td> 
  26.     <% } %> 
  27.   </pg:pages> 
  28.   <pg:next ifnull="true"> 
  29.     <% if (pageUrl != null) { %> 
  30.       <td><A HREF="<%= pageUrl %>"><IMG 
  31.         SRC=http://www.google.com/nav_next.gif alt="" border=0><br> 
  32.       <b>Next</b></A></td> 
  33.     <% } else { %> 
  34.       <td><IMG SRC=http://www.google.com/nav_last.gif alt="" border=0></td> 
  35.     <% } %> 
  36.   </pg:next> 
  37.   </tr> 
  38.   </table> 
  39.   </center> 
  40. </pg:index> 
  41. pg:pager> 

 图示:

至此使用pager-taglib-2.0进行分页就已经完成了!下面上传了文件及Demo.

项目源程序如下,可以直接导入Myeclipse8.6

http://down.51cto.com/data/347159