zoukankan      html  css  js  c++  java
  • 自定义分页标签最新修改版

    一、标签处理类:

    /**
     *  ClassName: PagerTag.java
     *  created on Oct 21, 2008
     *  Copyrights 2008 qjyong All rights reserved.
     *  EMail: qjyong@gmail.com
     */
    package com.qiujy.tags;
    import java.io.IOException;
    import java.util.Enumeration;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.tagext.TagSupport;
    /**
     * 自定义分页标签 
     * 使用方式 <my:pager pageSize="10" 
     *                   pageNo="1" 
     *                   recordCount="100"
     *                   url="index.jsp" />
     * 
     * @author qiujy
     * 
     */
    public class PagerTag extends TagSupport {
        private int pageSize = 10; // 每页要显示的记录数
        private int pageNo = 1; // 页号
        private int recordCount; // 总记录数
        private String url; // 目的地URL
        
        public void setPageSize(int pageSize) {
            this.pageSize = pageSize;
        }
        public void setPageNo(int pageNo) {
            this.pageNo = pageNo;
        }
        public void setRecordCount(int recordCount) {
            this.recordCount = recordCount;
        }
        public void setUrl(String url) {
            this.url = url;
        }
        // 主要的逻辑
        @Override
        public int doStartTag() throws JspException {
            if(recordCount == 0){
                return super.doStartTag();
            }
            
            // 总页数
            int pageCount = (recordCount + pageSize - 1) / pageSize;
            // 页号越界处理
            if (pageNo > pageCount) {
                pageNo = pageCount;
            }
            if (pageNo < 1) {
                pageNo = 1;
            }
            
            StringBuilder sb = new StringBuilder();
            
            sb.append("<form name='pageController' id='pageController' action='' method='post'>/r/n")
              .append("<input type='hidden' id='pageNo' name='pageNo' value='" + pageNo + "' />/r/n");
            
            //------------------------------------ 获取所有請求中的参数
            HttpServletRequest request = (HttpServletRequest) pageContext
                    .getRequest();
            Enumeration<String> enumeration = request.getParameterNames();
            String name = null;
            String value = null;
            //把请求中的所有参数当作隐藏表单域在页面中写出)
            while (enumeration.hasMoreElements()) {
                name =  enumeration.nextElement();
                value = request.getParameter(name);
                // 去除页号
                if (name.equals("pageNo")) {
                    if (null != value && !"".equals(value)) {
                        pageNo = Integer.parseInt(value);
                    }
                    continue;
                }
                sb.append("<input type='hidden' name='")
                  .append(name)
                  .append("' value='")
                  .append(value)
                  .append("'/>/r/n");
            }
            //----------------------------------------------------
            
              
            sb.append(" 总共有" + pageCount + "页,")
              .append("当前是第" + pageNo + "页 /r/n");
            
            if (pageNo == 1) {
                sb.append("首页");
                sb.append(" ");
                sb.append("上一页/r/n");
            } else {
                sb.append("<a href='#' onclick='turnOverPage(1)'>首页</a>/r/n");
                sb.append(" ");
                sb.append("<a href='#' onclick='turnOverPage(")
                        .append((pageNo - 1)).append(")'>上一页</a>/r/n");
            }
            sb.append(" ");
            if (pageNo == pageCount) {
                sb.append("下一页");
                sb.append(" ");
                sb.append("尾页/r/n");
            } else {
                sb.append("<a href='#' onclick='turnOverPage(")
                        .append((pageNo + 1)).append(")'>下一页</a>/r/n");
                sb.append(" ");
                sb.append("<a href='#' onclick='turnOverPage(").append(pageCount)
                        .append(")'>尾页</a>/r/n");
            }
            
            sb.append(" 跳到<select onChange='turnOverPage(this.value)'>/r/n");
            for (int i = 1; i <= pageCount; i++) {
                if (i == pageNo) {
                    sb.append("  <option value='")
                      .append(i)
                      .append("' selected='selected'>第")
                      .append(i)
                      .append("页</option>/r/n");
                } else {
                    sb.append("  <option value='")
                      .append(i)
                      .append("'>第")
                      .append(i)
                      .append("页</option>/r/n");
                }
            }
            sb.append("</select>/r/n");
            sb.append(" /r/n");
            sb.append("</form>/r/n");
            
            // 生成提交表单的JS
            sb.append("<script language='javascript'>/r/n");
            sb.append("  //翻页函数/t/n");
            sb.append("  function turnOverPage(no){/r/n");
            sb.append("    var form = document.pageController;/r/n");
            sb.append("    //页号越界处理/r/n");
            sb.append("    if(no").append(">").append(pageCount).append(") {/r/n");
            sb.append("        no=").append(pageCount).append(";/r/n");
            sb.append("    }/r/n");
            sb.append("    if(no").append("< 1){/r/n");
            sb.append("        no=1;/r/n");
            sb.append("    }/r/n");
            sb.append("    form.").append("pageNo").append(".value=no;/r/n");
            sb.append("    form.action='").append(url).append("';/r/n");
            sb.append("    form.submit();/r/n");
            sb.append("  }/r/n");
            sb.append("</script>/r/n");
            
            try {
                pageContext.getOut().println(sb.toString());
            } catch (IOException e) {
                e.printStackTrace();
            }
            
            return super.doStartTag();
        }
    }

    二、标签库描述文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd">
     <tlib-version>2.0</tlib-version>
     <short-name>my</short-name>
     <uri>http://blog.csdn.net/qjyong</uri>
     <tag>
        <description>通用分页标签</description>
        <name>pager</name>
        <tag-class>com.qiujy.tags.PagerTag</tag-class>
        <body-content>empty</body-content>
        <attribute>
          <name>pageNo</name>
          <required>true</required>
          <rtexprvalue>true</rtexprvalue> 
        </attribute>
        <attribute>
          <name>recordCount</name>
          <required>true</required>
          <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
          <name>pageSize</name>
          <required>true</required>
          <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
          <name>url</name>
          <required>true</required>
          <rtexprvalue>true</rtexprvalue>
        </attribute>
      </tag>
    </taglib>

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

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

    package com.qiujy.web.servlet;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    public class MyServlet extends HttpServlet {
        
        public static List<String> list = new ArrayList<String>();
        
        public MyServlet(){
            for(int i = 0; i < 100; i++){
                list.add("aaa" + i);
            }
        }
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            this.doPost(request, response);
        }
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            String pageNoStr = request.getParameter("pageNo");
            int pageNo = 1;
            if(pageNoStr != null && !pageNoStr.equals("")){
                pageNo = Integer.parseInt(pageNoStr);
            }
            
            int recordCount = list.size();
            int pageSize = 10;
            int startNo = (pageNo - 1) * pageSize;
            
            List<String> result = list.subList(startNo, startNo + 10);
            
            request.setAttribute("recordCount", recordCount);
            request.setAttribute("pageNo", pageNo);
            request.setAttribute("pageSize", pageSize);
            request.setAttribute("data", result);
            
            request.getRequestDispatcher("index.jsp").forward(request, response);
        }
    }

    web.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
        <servlet>
            <servlet-name>pageTestServlet</servlet-name>
            <servlet-class>com.qiujy.web.servlet.MyServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>pageTestServlet</servlet-name>
            <url-pattern>/testpager</url-pattern>
        </servlet-mapping>
        
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
    </web-app>

    页面:index.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib uri="http://blog.csdn.net/qjyong" prefix="q" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>PagerTag使用示例</title>
      </head>
      
      <body>
        <% 
          List<String> list = (List<String>)request.getAttribute("data");
          for(String str : list){
            out.println(str + "<br/>");
          }
        %>
        
        <q:pager pageNo="${pageNo}" 
                     recordCount="${recordCount}"
                 pageSize="${pageSize}" 
                 url="testpager" />
      </body>
    </html>

    访问testpager后的效果图:

    本文转自:http://blog.csdn.net/qjyong/article/details/3240303

  • 相关阅读:
    Treap 树堆 容易实现的平衡树
    (转)Maven实战(二)构建简单Maven项目
    (转)Maven实战(一)安装与配置
    根据请求头跳转判断Android&iOS
    (转)苹果消息推送服务器 php 证书生成
    (转)How to renew your Apple Push Notification Push SSL Certificate
    (转)How to build an Apple Push Notification provider server (tutorial)
    (转)pem, cer, p12 and the pains of iOS Push Notifications encryption
    (转)Apple Push Notification Services in iOS 6 Tutorial: Part 2/2
    (转)Apple Push Notification Services in iOS 6 Tutorial: Part 1/2
  • 原文地址:https://www.cnblogs.com/dreammyle/p/4015594.html
Copyright © 2011-2022 走看看