`
9708989
  • 浏览: 50650 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

自定义标签分页源代码---第一章

    博客分类:
  • java
阅读更多

自定义标签分页源代码

 

第一步:创建一个计算分页总数和生成分页脚本的类;PageControllerTag.java

 

源代码如下:

package org.luojs.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;

 

public class PageControllerTag extends BodyTagSupport {

 

       /** 每页显示的记录数(标签的属性) */

       private int pageSize = 5;

 

       /** 目的地(标签的属性) */

       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("\r\n<form method='post' action='' ").append(

                            "name='pageController'>\r\n");

 

              // 获取所有提交的参数(包括查询条件参数)

              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);

                            }

                            continue;

                     }

 

                     sb.append("<input type='hidden' name='").append(name).append(

                                   "' value='").append(value).append("'/>\r\n");

              }

 

              // 把当前页号设置成请求参数

             

              sb.append("<input type='hidden' name='").append(PAGNENO).append(

                            "' value='").append(pageNo).append("'/>\r\n");

 

              // 从请求对象中获取总记录数

              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("<br/>\r\n");

              sb

                            .append("&nbsp;\r\n");

              sb.append(" ").append(totalPage).append(" &nbsp;&nbsp;当前第 ").append(pageNo)

                            .append(" \r\n");

              sb

                            .append("&nbsp;\r\n");

              if (pageNo == 1) {

                     sb.append("首页");

                     sb.append("&nbsp;");

                     sb.append("上一页\r\n");

 

              } else {

                     sb.append("<a href='#' onclick='turnOverPage(1)'>首页</a>\r\n");

                     sb.append("&nbsp;");

                     sb.append("<a href='#' onclick='turnOverPage(")

                                   .append((pageNo - 1)).append(")'>上一页</a>\r\n");

              }

 

              sb.append("&nbsp;");

              if (pageNo == totalPage) {

                     sb.append("下一页");

                     sb.append("&nbsp;");

                     sb.append("尾页\r\n");

 

              } else {

                     sb.append("<a href='#' onclick='turnOverPage(")

                                   .append((pageNo + 1)).append(")'>下一页</a>\r\n");

                     sb.append("&nbsp;");

                     sb.append("<a href='#' onclick='turnOverPage(").append(totalPage)

                                   .append(")'>尾页</a>\r\n");

              }

 

              sb.append("&nbsp;");

 

              sb.append("跳转到<select onChange='turnOverPage(this.value)'>\r\n");

 

              for (int i = 1; i <= totalPage; i++) {

                     if (i == pageNo) {

                            sb.append("  <option value='").append(i).append("' 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("&nbsp;\r\n");

              sb.append("</form>\r\n");

 

              // 生成提交表单的JS

              sb.append("<script language='javascript'>\r\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(totalPage).append(") {\r\n");

              sb.append("        no=").append(totalPage).append(";\r\n");

              sb.append("    }\r\n");

              sb.append("    if(no").append("<=0){\r\n");

              sb.append("        no=1;\r\n");

              sb.append("    }\r\n");

              sb.append("    form.").append(PAGNENO).append(".value=no;\r\n");

              sb.append("    form.action='").append(gotoURI).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();

       }

 

       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;

       }

}

 

 

0
0
分享到:
评论
1 楼 Kim_T 2011-07-12  
具体怎么用,求解~ 

Thanks~~

相关推荐

    MFC程序开发参考大全第13--16章 源代码

    这个压缩包包含了MFC程序开发参考大全的第13至16章的源代码,这四章通常会涵盖MFC中的核心概念、高级主题以及实际应用技巧。现在,我们将深入探讨这些章节可能涉及的知识点。 第13章:对话框和控件 这一章通常会...

    《21天学通ASP[1]NET》源代码15-17章

    在这一章中,读者将学习到ASP.NET中丰富的服务器控件,如按钮、文本框、复选框等,以及如何通过这些控件与用户进行交互。事件处理机制是ASP.NET的核心部分,它允许开发者在用户触发特定操作时执行自定义代码。此外...

    精通ASP.net+2.0典型模块设计与实现源代码 光盘资料01-16章

    《精通ASP.NET+2.0典型模块设计与实现源代码》是一本深入探讨ASP.NET 2.0技术的专业书籍,其光盘资料包含了从第1章到第16章的完整源代码,旨在帮助读者通过实际操作理解并掌握ASP.NET 2.0的关键技术和模块设计。...

    零基础学ASP.NET 2.0电子书&源代码绝对完整版1

    相信大家找得到该书的源代码部分 也就是这部分内容 因此我便无偿奉送 让大家下载试试。 若感觉可以方可继续下载电子书部分。 1.本书1~21章所附代码的运行环境 操作系统:Windows Server 2003或Windows XP ...

    Microsoft+SQL+Server+2008技术内幕:T-SQL查询_源代码及附录 中文版

    第1章 逻辑查询处理1 1.1 逻辑查询处理的各个阶段2 1.1.1 逻辑查询处理阶段简介2 1.2 客户/订单场景下的查询示例4 1.3 逻辑查询处理阶段详解5 1.3.1 步骤1:FROM阶段5 1.3.2 步骤2:WHERE阶段9 1.3.3 步骤3:...

    Excel VBA与数据库整合应用范例精讲书及源代码

    Excel VBA与数据库整合应用范例精讲(书及范例源代码) 内容简介 《Excel VBA 数据库整合应用范例精讲》用180个实例介绍了利用Excel VBA来操作数据库(包括Access、SQL Server和FoxPro)的实用方法和技巧。  全书共11...

    挑战ASP.NET2.0 for C# 动态网站开发(第6章互动论坛源代码)

    【标题】:“挑战ASP.NET2.0 for C# 动态网站开发(第6章互动论坛源代码)” 【描述】中的“第5章”可能是输入错误,因为标题提到的是第6章的源代码,所以我们重点讨论的是基于ASP.NET 2.0和C#的动态网站开发中的第...

    精通javaweb整合开发源代码

    《精通javaweb整合开发源代码》这一主题深入探讨了如何高效地进行Java Web应用程序的集成开发,特别是在Java EE环境中运用JSP 2.0的高级特性。在第06章“JSP2.0在Java EE中的高级应用”中,我们将重点关注以下几个...

    VC++.NET案例开发集锦源代码.part1

    第一章 VC++.NET 编程基础 案例1 第一个Windows程序 案例2 基数转换计数器 案例3 打印杨晖三角形 案例4 确定一个月的天数 案例5 石头、剪子、布猜拳游戏 案例6 创建动态菜单 案例7 创建工具栏 案例8 递归...

    ASP.NET程序开发范例宝典(C#)(第2版) 光盘源程序9-12章.rar

    光盘源程序9-12章的RAR压缩包文件包含了书中对应章节的源代码,这对于学习者理解和实践这些实例非常有帮助。 9至12章的知识点涵盖了ASP.NET的多个重要主题: 1. **控件与事件处理**:在9章中,可能会讲解如何使用...

    Java微服务架构163课

    028第一个 Docker 应用程序 029运行交互式的容器 030后台运行与停止容器 031Docker 客户端帮助命令 032运行 Web 容器 033指定 Web 容器映射端口 034查看容器进程 035查看容器状态 036批量移除容器 037...

    Java微服务架构l零从基础到精通高清视频教程全套 163课

    028第一个 Docker 应用程序 029运行交互式的容器 030后台运行与停止容器 031Docker 客户端帮助命令 032运行 Web 容器 033指定 Web 容器映射端口 034查看容器进程 035查看容器状态 036批量移除容器 037Docker Hub ...

    SQLServer2008技术内幕T-SQL查询包含源代码及附录A

    第1章 逻辑查询处理1 1.1 逻辑查询处理的各个阶段2 1.1.1 逻辑查询处理阶段简介2 1.2 客户/订单场景下的查询示例4 1.3 逻辑查询处理阶段详解5 1.3.1 步骤1:FROM阶段5 1.3.2 步骤2:WHERE阶段9 1.3.3 步骤3:GROUP ...

    ASP.NET 2.0+SQL Server 2005全程指南-源代码

    1.4 第一个ASENET程序 1.5 本章小结 第2章 C#程序设计基础 2.1 C#语言简介 2.2 C#中的数据类型 2.2.1 值类型 2.2.2 引用类型 2.2.3 装箱和拆箱 2.3 C#语言中的变量和常量 2.3.1 变量 2.3.2 常量 2.4...

    java范例开发大全源代码

     实例1 开发第一个Java程序 7  第2章 Java基础类型与运算符(教学视频:39分钟) 9  2.1 基础类型 9  实例2 自动提升 9  实例3 自动转换 10  实例4 常用基础类型之强制转换 11  2.2 运算符 12 ...

    Grails 技术精解与Web开发实践【源码+样章】----下载不扣分,回帖加1分,欢迎下载,童叟无欺

    第一篇 入门篇 第2章 Hello Grails 6 2.1 Grails的安装 6 2.1.1 JDK的安装与配置 6 2.1.2 Grails的安装 7 2.2 创建Grails工程 8 2.3 Grails的MVC架构 11 2.4 Scaffold应用程序 14 2.5 开发工具的使用 17 2.6 本章小...

    jsp 简易教程

    #### 第1章 JSP简介 - **1.1 什么是JSP** - JavaServer Pages(简称JSP)是一种基于Java的服务器端脚本技术,用于生成动态网页内容。 - JSP允许开发人员将业务逻辑与表示层分离,使代码更易于维护和扩展。 - **...

    Bootstrap 第8章 输入框和导航组件

    Bootstrap使用LESS预处理器编写,源代码组织清晰,方便开发者理解其工作原理。同时,Bootstrap提供了一系列开发工具,如Sass转换、Grunt任务自动化、以及在线定制器,帮助开发者快速构建符合项目需求的定制版...

    源代码_ASP.NET 2.0+SQL Server网络应用系统开发案例精解_BLOG

    在"第7章 BLOG"的源代码中,我们可以预期看到有关于博客系统的开发实践。博客系统通常包括用户注册登录、发布文章、评论互动等功能,涉及到的ASP.NET 2.0技术可能有: 1. **用户身份验证与授权**:使用ASP.NET 2.0...

    VC++2005编程实例精粹源代码Part15

    在本资源中,"VC++2005编程实例精粹源代码Part15"主要聚焦于使用Microsoft Visual C++ 2005进行水晶报表(Crystal Reports)的开发。这个部分涵盖了第7章的内容,提供了160到185个具体的编程实例,旨在帮助开发者...

Global site tag (gtag.js) - Google Analytics