Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 278|回复: 0

[jsp学习]一个自定义分页标签

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-1 20:27:50 | 显示全部楼层 |阅读模式
    一、标签处理类:还是采用继承自BodyTagSupport(其实继承自TageSupport也行),而没有采用SimpleTagSupport(?)
       
         
          
          package org.qiujy.tag; import java.io.IOException;
    import java.util.Enumeration; import javax.Servlet.http.HttpServletRequest;
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.tagext.BodyTagSupport; /**
      * 自定义分页标签
      * 1.从表单中获得全部查询条件参数,生成对应的<input type=hidden>以备下次提交查询条件参数及值.
      * 2.把当前页号(pageNo)设置成了请求参数,以便后台程序可以获得该值进行实时从数据数据库查询相应要显示的数据
      * 3.使用举例:
      *   a) 后台程序:
      *      //设置每页要显示的记录数,并保存到请求对象中(必须步骤)
      *      int pageSize = 20;
      *      request.setAttribute("pageSize", pageSize);
      *      //获取当前页号(必须步骤)
      *      String pageNo = request.getParameter("pageNo");
      *      //利用这两参数进行数据查询...
      *   b) 页面首先导入标签库: <%@ taglib uri="http://www.qiujy.cn" prefix="q"%>
      *   c) 页面使用标签: <q:pageTag recordCount="每页显示的记录数" gotoURI="要跳转到的目的地"/>
      *   
      * @author qiujy
      *
      */
    public class PageControllerTag extends BodyTagSupport {  /** 每页显示的记录数(标签的属性) */
      private int pageSize = 20;  /** 目的地(标签的属性) */
      private String gotoURI;  /** 总记录数名 */
      public static final String TOTAL = "total";  /** 当前页号名 */
      public static final String PAGNENO = "pageNo";  /** 每页要显示的记录数名 */
      public static final String RECORDCOUNT = "pageSize";  /** 目的地名 */
      public static final String GOTOURI = "gotoURI";
        //标签处理程序
      public int doStartTag() throws JspException {
       /** 当前页号(从请求对象中得到) */
       int pageNo = 1;
       /** 总记录数(从请求对象中得到) */
       int total = 0;
       /** 总页数(计算得出) */
       int totalPage = 1;
       
       HttpServletRequest request = (HttpServletRequest) pageContext
         .getRequest();   // 要输出到页面的HTML文本
       StringBuffer sb = new StringBuffer();   sb.append("
    <form method="post" action="" ").append(
         "name="pageController">
    ");   // 获取所有提交的参数(包括查询条件参数)
       Enumeration enumeration = request.getParameterNames();
       String name = null;
       String value = null;
       while (enumeration.hasMoreElements()) {
        name = (String) enumeration.nextElement();
        value = request.getParameter(name);
       
        if (name.equals(RECORDCOUNT)) {
         continue;
        }
        // 从请求对象中获取要跳转到的页号
        if (name.equals(PAGNENO)) {
         if (null != value && !"".equals(value)) {
          pageNo = Integer.parseInt(value);
          System.out.println("from request pageNo====>" + pageNo);
         }
         continue;
        }    sb.append("<input type="hidden" name="").append(name).append(
          "" value="").append(value).append(""/>
    ");
       }
       
       //把当前页号设置成请求参数
       System.out.println("tag:pageNo=====>" + pageNo);
       sb.append("<input type="hidden" name="").append(PAGNENO).append(
       "" value="").append(pageNo).append(""/>
    ");   // 从请求对象中获取总记录数
       String tot = (String) request.getAttribute(TOTAL);
       if (null != tot && !"".equals(tot)) {
        total = Integer.parseInt(tot);
       }
       //计算总页数
       totalPage = getTotalPage(total);   System.out.println("total-->" + total);   sb.append("<hr width="97%"/>
    ");
       sb.append("            
    ");
       sb.append("总 ").append(totalPage).append(" 页,当前第 ").append(pageNo)
         .append(" 页
    ");
       sb.append("            
    ");
       if (pageNo == 1) {
        sb.append("首页");
        sb.append(" ");
        sb.append("上一页
    ");   } else {
        sb.append("<a href="#">首页</a>
    ");
        sb.append(" ");
        sb.append("<a href="#" onclick="turnOverPage(")
          .append((pageNo - 1)).append(")">上一页</a>
    ");
       }   sb.append(" ");
       if (pageNo == totalPage) {
        sb.append("下一页");
        sb.append(" ");
        sb.append("尾页
    ");   } else {
        sb.append("<a href="#" onclick="turnOverPage(")
          .append((pageNo + 1)).append(")">下一页</a>
    ");
        sb.append(" ");
        sb.append("<a href="#" onclick="turnOverPage(")
         .append(totalPage).append(")">尾页</a>
    ");
       }   sb.append(" ");
       
       sb.append("跳到<select>
    ");
       
       for(int i = 1; i <= totalPage; i++){
        if(i == pageNo){
         sb.append("  <option value="").append(i).append("" selected>第")
         .append(i).append("页</option>
    ");
        }else{
         sb.append("  <option value="").append(i).append("">第")
         .append(i).append("页</option>
    ");
        }
       }
       sb.append("</select>
    ");
       
    //  sb.append("<input type="text" name="").append(PAGNENO).append(
    //    "" size="3" maxlength="3"/>
    ");
    //  sb.append("<input type="button" value="GO"").append(
    //    "onclick="turnOverPage(pageNo.value)"/>
    ");
       sb.append("
    ");
       sb.append("</form>
    ");   // 生成提交表单的JS
       sb.append("<script language="javascript">
    ");
       sb.append("  function turnOverPage(no){
    ");
       sb.append("    var form = document.pageController;
    ");
       sb.append("    //页号越界处理
    ");
       sb.append("    if(no").append(">").append(totalPage).append(") {
    ");
       sb.append("        no=").append(totalPage).append(";
    ");
       sb.append("    }
    ");
       sb.append("    if(no").append("<=0){
    ");
       sb.append("        no=1;
    ");
       sb.append("    }
    ");
       sb.append("    form.").append(PAGNENO).append(".value=no;
    ");
       sb.append("    form.action="").append(gotoURI).append("";
    ");
       sb.append("    form.submit();
    ");
       sb.append("  }
    ");
       sb.append("</script>
    ");   try {
        pageContext.getOut().println(sb.toString());
       } catch (IOException e) {    e.printStackTrace();
       }
       return super.doStartTag();
      }  public String getGotoURI() {
       return gotoURI;
      }  public void setGotoURI(String gotoURI) {
       this.gotoURI = gotoURI;
      }  public int getPageSize() {
       return pageSize;
      }  public void setPageSize(int pageSize) {
       this.pageSize = pageSize;
      }  /**
       * 根据总记录数得到总页数
       *
       * @return int 总页数
       */
      private int getTotalPage(int total) {
       int totalPage = 1;
       if (total == 0) {
        totalPage = 1;
       } else {
        totalPage = (total % pageSize == 0) ? (total / pageSize)
          : (total / pageSize + 1);
       }   return totalPage;
      } }
      
          
         
         二、标签库描述文件:  
       
         
          
          <?xml version="1.0" encoding="UTF-8"?> <taglib 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-jsptaglibrary_2_0.xsd" version="2.0">
       <tlib-version>0.9</tlib-version>
       <short-name>myCustomerTag</short-name>
       <uri>http://www.qiujy.cn</uri>
       <tag>
         <name>pageTag</name>
         <tag-class>org.qiujy.tag.PageControllerTag</tag-class>
         <body-content>scriptless</body-content>
         <attribute>
           <name>pageSize</name>
           <required>true</required>
           <rtexprvalue>true</rtexprvalue>
         </attribute>
         <attribute>
           <name>gotoURI</name>
           <required>true</required>
           <rtexprvalue>true</rtexprvalue>
         </attribute>
       </tag>
    </taglib>
          
         
         三、页面使用:(由于是采用jsp2.0版本,所以不用在web.xml中声明tld文件了)  
       
         
          
          <%@ page contentType="text/html; charset=utf-8" %>
    <%@ taglib uri="WEB-INF/c.tld" prefix="c"%>
    <%@ taglib uri="WEB-INF/fn.tld" prefix="fn"%>
    <%@ taglib uri="WEB-INF/fmt.tld" prefix="fmt"%>
    <%@ taglib uri="http://www.qiujy.cn" prefix="q"%>
    <html>
      <head>
       <title>博雅博客</title>
       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
       <link rel="StyleSheet" type="text/css" href="images/mystyle.css">
      </head>
      <body>
       <jsp:include flush="true" page="./templet/header.jsp"/>   <table border="1" width="900" bordercolor="#FCD447" align="center">
        <tr>
         <td width="10%" valign="top">
         <!-- 导航栏开始 -->
          <table cellspacing="0" cellpadding="0" width="150" border="0">
           <tbody>
            <tr>
             <td>
              <table cellspacing="0" cellpadding="0" width="150" border="0">
               <tbody>
                <tr>
                 <td colspan="2" height="5">
                 <img src="./images/default_icon.jpg" alt="logo" >
                 </td>
                </tr>
               </tbody>
               
               <tr>
               <td>
                <jsp:include flush="true" page="./templet/navigationbar.jsp"/>
               </td>
               </tr>          </table>
             </td>
            </tr>
           </tbody>
          </table>
          <!-- 导航栏结束 -->
         </td>
         <td width="90%" valign="top">
          <table width="100%">
           <tr>
            <td><font color="#FF0000"><b>查询关键字:  相关文章 篇</b></font>
           </td>
           </tr>
           <c:forEach var="art" items="" end="9">
           <tr>
            <td>
              <table width="100%">
                <tr>
               <td><b>* <a href="articleDetail.do?id=" class="a02"></a> ...
                   
               <fmt:formatDate value="" pattern="yyyy-MM-dd"/></b></td>
                </tr>
                <tr>
               <td>
                  <b>摘要:</b>
               </td>
                </tr>
             </table>
             </td>
           </tr>
           </c:forEach>
           <tr>
            <td><q:pageTag pageSize="" gotoURI="searchArticle.do"/></td>
           </tr>
          </table>
         </td>
         
       </table>
       <jsp:include flush="true" page="./templet/footer.jsp" />
      </body>
    </html>
            
             
             
               
               

                
               

                
               
             
            
      
          
         
       
      


    源码下载:http://file.javaxxz.com/2014/10/1/202749719.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-22 02:51 , Processed in 0.431462 second(s), 52 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表