现在的位置: 首页 > 综合 > 正文

自定义分页标签最新修改版

2013年04月06日 ⁄ 综合 ⁄ 共 9056字 ⁄ 字号 评论关闭

 一、标签处理类:

  1. /**
  2.  *  ClassName: PagerTag.java
  3.  *  created on Oct 21, 2008
  4.  *  Copyrights 2008 qjyong All rights reserved.
  5.  *  EMail: qjyong@gmail.com
  6.  */
  7. package com.qiujy.tags;
  8. import java.io.IOException;
  9. import java.util.Enumeration;
  10. import javax.servlet.http.HttpServletRequest;
  11. import javax.servlet.jsp.JspException;
  12. import javax.servlet.jsp.tagext.TagSupport;
  13. /**
  14.  * 自定义分页标签 
  15.  * 使用方式 <my:pager pageSize="10" 
  16.  *                   pageNo="1" 
  17.  *                   recordCount="100"
  18.  *                   url="index.jsp" />
  19.  * 
  20.  * @author qiujy
  21.  * 
  22.  */
  23. public class PagerTag extends TagSupport {
  24.     private int pageSize = 10// 每页要显示的记录数
  25.     private int pageNo = 1// 页号
  26.     private int recordCount; // 总记录数
  27.     private String url; // 目的地URL
  28.     
  29.     public void setPageSize(int pageSize) {
  30.         this.pageSize = pageSize;
  31.     }
  32.     public void setPageNo(int pageNo) {
  33.         this.pageNo = pageNo;
  34.     }
  35.     public void setRecordCount(int recordCount) {
  36.         this.recordCount = recordCount;
  37.     }
  38.     public void setUrl(String url) {
  39.         this.url = url;
  40.     }
  41.     // 主要的逻辑
  42.     @Override
  43.     public int doStartTag() throws JspException {
  44.         if(recordCount == 0){
  45.             return super.doStartTag();
  46.         }
  47.         
  48.         // 总页数
  49.         int pageCount = (recordCount + pageSize - 1) / pageSize;
  50.         // 页号越界处理
  51.         if (pageNo > pageCount) {
  52.             pageNo = pageCount;
  53.         }
  54.         if (pageNo < 1) {
  55.             pageNo = 1;
  56.         }
  57.         
  58.         StringBuilder sb = new StringBuilder();
  59.         
  60.         sb.append("<form name='pageController' id='pageController' action='' method='post'>/r/n")
  61.           .append("<input type='hidden' id='pageNo' name='pageNo' value='" + pageNo + "' />/r/n");
  62.         
  63.         //------------------------------------ 获取所有請求中的参数
  64.         HttpServletRequest request = (HttpServletRequest) pageContext
  65.                 .getRequest();
  66.         Enumeration<String> enumeration = request.getParameterNames();
  67.         String name = null;
  68.         String value = null;
  69.         //把请求中的所有参数当作隐藏表单域在页面中写出)
  70.         while (enumeration.hasMoreElements()) {
  71.             name =  enumeration.nextElement();
  72.             value = request.getParameter(name);
  73.             // 去除页号
  74.             if (name.equals("pageNo")) {
  75.                 if (null != value && !"".equals(value)) {
  76.                     pageNo = Integer.parseInt(value);
  77.                 }
  78.                 continue;
  79.             }
  80.             sb.append("<input type='hidden' name='")
  81.               .append(name)
  82.               .append("' value='")
  83.               .append(value)
  84.               .append("'/>/r/n");
  85.         }
  86.         //----------------------------------------------------
  87.         
  88.           
  89.         sb.append(" 总共有" + pageCount + "页,")
  90.           .append("当前是第" + pageNo + "页 /r/n");
  91.         
  92.         if (pageNo == 1) {
  93.             sb.append("首页");
  94.             sb.append(" ");
  95.             sb.append("上一页/r/n");
  96.         } else {
  97.             sb.append("<a href='#' onclick='turnOverPage(1)'>首页</a>/r/n");
  98.             sb.append(" ");
  99.             sb.append("<a href='#' onclick='turnOverPage(")
  100.                     .append((pageNo - 1)).append(")'>上一页</a>/r/n");
  101.         }
  102.         sb.append(" ");
  103.         if (pageNo == pageCount) {
  104.             sb.append("下一页");
  105.             sb.append(" ");
  106.             sb.append("尾页/r/n");
  107.         } else {
  108.             sb.append("<a href='#' onclick='turnOverPage(")
  109.                     .append((pageNo + 1)).append(")'>下一页</a>/r/n");
  110.             sb.append(" ");
  111.             sb.append("<a href='#' onclick='turnOverPage(").append(pageCount)
  112.                     .append(")'>尾页</a>/r/n");
  113.         }
  114.         
  115.         sb.append(" 跳到<select onChange='turnOverPage(this.value)'>/r/n");
  116.         for (int i = 1; i <= pageCount; i++) {
  117.             if (i == pageNo) {
  118.                 sb.append("  <option value='")
  119.                   .append(i)
  120.                   .append("' selected='selected'>第")
  121.                   .append(i)
  122.                   .append("页</option>/r/n");
  123.             } else {
  124.                 sb.append("  <option value='")
  125.                   .append(i)
  126.                   .append("'>第")
  127.                   .append(i)
  128.                   .append("页</option>/r/n");
  129.             }
  130.         }
  131.         sb.append("</select>/r/n");
  132.         sb.append(" /r/n");
  133.         sb.append("</form>/r/n");
  134.         
  135.         // 生成提交表单的JS
  136.         sb.append("<script language='javascript'>/r/n");
  137.         sb.append("  //翻页函数/t/n");
  138.         sb.append("  function turnOverPage(no){/r/n");
  139.         sb.append("    var form = document.pageController;/r/n");
  140.         sb.append("    //页号越界处理/r/n");
  141.         sb.append("    if(no").append(">").append(pageCount).append(") {/r/n");
  142.         sb.append("        no=").append(pageCount).append(";/r/n");
  143.         sb.append("    }/r/n");
  144.         sb.append("    if(no").append("< 1){/r/n");
  145.         sb.append("        no=1;/r/n");
  146.         sb.append("    }/r/n");
  147.         sb.append("    form.").append("pageNo").append(".value=no;/r/n");
  148.         sb.append("    form.action='").append(url).append("';/r/n");
  149.         sb.append("    form.submit();/r/n");
  150.         sb.append("  }/r/n");
  151.         sb.append("</script>/r/n");
  152.         
  153.         try {
  154.             pageContext.getOut().println(sb.toString());
  155.         } catch (IOException e) {
  156.             e.printStackTrace();
  157.         }
  158.         
  159.         return super.doStartTag();
  160.     }
  161. }

二、标签库描述文件:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"
  3.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd">
  4.  <tlib-version>2.0</tlib-version>
  5.  <short-name>my</short-name>
  6.  <uri>http://blog.csdn.net/qjyong</uri>
  7.  <tag>
  8.     <description>通用分页标签</description>
  9.     <name>pager</name>
  10.     <tag-class>com.qiujy.tags.PagerTag</tag-class>
  11.     <body-content>empty</body-content>
  12.     <attribute>
  13.       <name>pageNo</name>
  14.       <required>true</required>
  15.       <rtexprvalue>true</rtexprvalue> 
  16.     </attribute>
  17.     <attribute>
  18.       <name>recordCount</name>
  19.       <required>true</required>
  20.       <rtexprvalue>true</rtexprvalue>
  21.     </attribute>
  22.     <attribute>
  23.       <name>pageSize</name>
  24.       <required>true</required>
  25.       <rtexprvalue>true</rtexprvalue>
  26.     </attribute>
  27.     <attribute>
  28.       <name>url</name>
  29.       <required>true</required>
  30.       <rtexprvalue>true</rtexprvalue>
  31.     </attribute>
  32.   </tag>
  33. </taglib>

三、把标签处理类和tld打成pager.jar包。使用时只需添加到项目的类路径中即可。

 

四、测试:先写一个Servlet来创建测试数据

  1. package com.qiujy.web.servlet;
  2. import java.io.IOException;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. public class MyServlet extends HttpServlet {
  10.     
  11.     public static List<String> list = new ArrayList<String>();
  12.     
  13.     public MyServlet(){
  14.         for(int i = 0; i < 100; i++){
  15.             list.add("aaa" + i);
  16.         }
  17.     }
  18.     public void doGet(HttpServletRequest request, HttpServletResponse response)
  19.             throws ServletException, IOException {
  20.         this.doPost(request, response);
  21.     }
  22.     public void doPost(HttpServletRequest request, HttpServletResponse response)
  23.             throws ServletException, IOException {
  24.         String pageNoStr = request.getParameter("pageNo");
  25.         int pageNo = 1;
  26.         if(pageNoStr != null && !pageNoStr.equals("")){
  27.             pageNo = Integer.parseInt(pageNoStr);
  28.         }
  29.         
  30.         int recordCount = list.size();
  31.         int pageSize = 10;
  32.         int startNo = (pageNo - 1) * pageSize;
  33.         
  34.         List<String> result = list.subList(startNo, startNo + 10);
  35.         
  36.         request.setAttribute("recordCount", recordCount);
  37.         request.setAttribute("pageNo", pageNo);
  38.         request.setAttribute("pageSize", pageSize);
  39.         request.setAttribute("data", result);
  40.         
  41.         request.getRequestDispatcher("index.jsp").forward(request, response);
  42.     }
  43. }

web.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
  5.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  6.     <servlet>
  7.         <servlet-name>pageTestServlet</servlet-name>
  8.         <servlet-class>com.qiujy.web.servlet.MyServlet</servlet-class>
  9.     </servlet>
  10.     <servlet-mapping>
  11.         <servlet-name>pageTestServlet</servlet-name>
  12.         <url-pattern>/testpager</url-pattern>
  13.     </servlet-mapping>
  14.     
  15.     <welcome-file-list>
  16.         <welcome-file>index.jsp</welcome-file>
  17.     </welcome-file-list>
  18. </web-app>

 

页面:index.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <%@ taglib uri="http://blog.csdn.net/qjyong" prefix="q" %>
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  4. <html>
  5.   <head>
  6.     <title>PagerTag使用示例</title>
  7.   </head>
  8.   
  9.   <body>
  10.     <
  11.       List<String> list = (List<String>)request.getAttribute("data");
  12.       for(String str : list){
  13.         out.println(str + "<br/>");
  14.       }
  15.     %>
  16.     
  17.     <q:pager pageNo="${pageNo}" 
  18.                  recordCount="${recordCount}"
  19.              pageSize="${pageSize}" 
  20.              url="testpager" />
  21.   </body>
  22. </html>

 

访问testpager后的效果图:

 

 

抱歉!评论已关闭.