自定义标签通用分页

Java之jsp自定义标签与通用分页案例 自定义jsp标签与通用分页的界面 阅读详情

 

自定义标签分页源代码

 

第一步:创建一个计算分页总数和生成分页脚本的类;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;

       }

}

 

第二步;编写标签描述符文件。标签文件luojspage.tld

 

<?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.luojs.cn</uri>

  <tag>

    <name>pageTag</name>

    <tag-class>org.luojs.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>

第三步,调用

     调用时,需要如下步骤

1,设置每页要显示的记录数,并保存到请求对象中(必须步骤)

       int pageSize = 20;

       request.setAttribute("pageSize", pageSize);

    2,获取当前页号(必须步骤)

       String pageNo = request.getParameter("pageNo");

    3,利用这两个参数进行数据查询

       ...。。。。。

    4,在请求中设置的总记录数(必须步骤)

       request.setAttribute("total", “一共有多少数据”);

 

第四步; 在jsp页面上调用

       在页面上调用时,只需导入自定义标签和引入标签脚本,其中,在脚本代码中,pageSize=” 每页显示的记录数.” gotoURL=” 要提交的路径”

      <%@ taglib uri="http://www.luojs.cn" prefix="luojs"%>

 

<luojs:pageTag pageSize="${requestScope.pageSize}" gotoURI="longin.do?path=index"/>

小提示:在页面上调用时,会给我们自动生成一个隐藏的from表单来封装分页脚本提交的数据

五;一个简单的小demo演示分页效果,

1,新建PageControllerTag.java

   Copy上面第一步的代码:

2,编写标签文件luojspage.tld

Copy上面第二步的代码:

3,调用分页

(1)       查询数据的方法(这里用的hibernate的hql语句进行查询)

 public List getPage(final String sql, int pageId, final int pageSize) {

 

              System.out.println("yo  wcomecome you 1");

              final int firstId = (pageId - 1) * pageSize;

 

              Query query = this.getHibernateTemplate().getSessionFactory()

                            .getCurrentSession().createQuery(sql);

              query.setFirstResult(firstId);

              query.setMaxResults(pageSize);

              List list = query.list();

              return list;

       }

 

(2)       在action或servlet中调用查询数据的方法

int pageSize = 3; //设置每页要显示的条数

              request.setAttribute("pageSize", new Integer(pageSize));

             

              String pageNo = request.getParameter("pageNo");// 获取当前页号

              if (pageNo == null)

                     pageNo = "1";            

              int pagenum = Integer.parseInt(pageNo); //

              // 利用这两参数进行数据查询

              List listUser = user.getPage("from User", pagenum, pageSize);

        //获取中的记录数

              int size = user.serverSearchById(0, 0).size();

              request.setAttribute("total", size + ""); //总条数 

              request.setAttribute("listUser", listUser);

              return mapping.findForward("succ");

 

4,页面代码

<%@ page language="java" pageEncoding="gbk"%>

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

<%@ taglib uri="http://www.luojs.cn" prefix="luojs"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>  

    <title>分页测试</title>

  </head>

  <body>

    <h2>This is my Struts page. </h2><br>

   <h4>Worcome ${name }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="longin.do?path=toadds">add User</a></h4> <hr/>

   <table width="650px" border="1" background="#fffff" align="center" cellpadding="0" cellspacing="0" bordercolor="#cccfff" bgcolor="#ffffff">

  <caption>

    User info

  </caption>

  <tr bgcolor="#99ffcc">

    <th scope="col">id</th>

    <th scope="col">UserName</th>

    <th scope="col">PassWord</th>

    <th scope="col">Update</th>

    <th scope="col">Del</th>

  </tr>

  <c:forEach items="${listUser}" var="user">

  <tr>

    <td>${user.id }</td>

    <td>${user.username}</td>

    <td>${user.password }</td>

    <td>&nbsp;<a href="longin.do?path=toupdate&id=${user.id }">update</a>&nbsp;</td>

    <td>&nbsp;<a href="longin.do?path=del&id=${user.id }" onClick="return(confirm(' delete this is user?'));">delete</a>&nbsp;</td>

  </tr>

 </c:forEach>

</table>

<table border="0" align="center"><tr><td>

<luojs:pageTag pageSize="${requestScope.pageSize}" gotoURI="longin.do?path=index"/>

</td></tr></table>

  </body>

</html>

 

5,页面效果:

效果请参见 分页效果图

一个JSP自定义通用分页标签最新修改版及其使用示例 一个JSP自定义通用分页标签最新修改版及其使用示例。 可先参看:http://blog.youkuaiyun.com/qjyong/archive/2008/11/06/3240303.aspx 的介绍再决定下载。 立即下载

相关推荐

JavaScript性能优化:全链路性能优化策略

JavaScript性能优化是提升Web应用质量的核心要素,直接影响用户体验与业务成果。研究表明,页面加载延迟1秒可能导致转化率下降7%。高效的JavaScript执行能减少主线程阻塞,避免动画卡顿或操作延迟,尤其在移动端低性能设备上更为关键。优化内存管理与减少冗余计算可降低浏览器资源消耗,防止因内存泄漏导致的崩溃,提升应用稳定性。在竞争激烈的互联网环境中,性能优势已成为产品差异化的关键因素,直接影响用户留存与商业价值。因此,性能优化应作为开发全周期的核心实践,而非事后补救措施。

weixin_49707375的博客 1270

用自定义标签实现分页

我们先分析一下分页标签的需求:如下图: 附件: 您所在的用户组无法下载或查看附件如果我们要写出分页标签,最少我们要有三个变量,curPage//当前页 --也就是说现在用户正在浏览第几页.total //总记录数 -- 我们从数据库得到的总记录数PAGE_SIZE//页大小 --也就是说每页我们用来显示多少数据,这一般是常量,有时在Servlet指定,有时在properties文件里读取.

翔的窝窝 752

导带、价带

价带是电子的“束缚态”能量区间,决定材料的化学性质;导带是电子的“自由态”能量区间,直接决定材料的导电能力;禁带宽度则是区分金属、半导体与绝缘体的核心参数。通过调控能带结构(如掺杂、应变工程),可设计出具有特定电学和光学特性的功能材料,推动电子信息、能源转换等领域的技术革新。

weixin_51552564的博客 5116

jsp自定义标签——分页标签

  效果预览: 实现代码: 分页标签处理类: package ln.ydc.blog.web.tag.myjsp; import java.io.IOException; import javax.servlet.jsp.JspContext; import javax.servlet.jsp.JspException; import javax.servlet.jsp....

Free Coding 326

maya中的几个热盒(空格、shift、w键)

maya中许多功能打包放进了不同的热盒中,让我们使用起来更加的便捷,熟练掌握后可以大大提升了建模速度。按下不同按键后鼠标不需要精确点到某个图标,往某个方向滑滑滑就打开了相应功能,非常的炫酷和迅猛。

m0_71983242的博客 1756

macOS Monterey官方镜像高速下载指南(附迅雷链接+兼容性清单)

本文提供macOS Monterey官方镜像的高速下载指南,重点介绍利用迅雷等工具加速下载官方安装包的有效方法。同时,详细列出了系统兼容性清单,帮助用户在下载前确认设备支持,并分享了从下载、验证到安全安装的完整流程与常见问题解决方案。

j7k8l的博客 2174

自定义jsp分页标签

文章目录自定义jsp分页标签 自定义jsp分页标签

阳某的博客 840

Cgroup对进程所占用的CPU与内存资源同时进行限制的测试

测试环境:Ubuntu。处理器数量:1CPU。内存大小:2048MB。 以下是测试程序mem_cpu_test.c的代码。 将mem_cpu_test.c编译为可以运行的程序mem_cpu_test。 运行程序,并用top命令查看mem_cpu_test所占用的系统资源情况,可以看到,mem_cpu_test使用了50%左右的内存资源,也就是1000MB左右,并占用了接近全部的CPU资源。 关闭以上的程序后,在Cgroup子系统memory和cpu下分别创建进程组test1和test2。 并设置tes

qq_44998067的博客 1153

JAVA 自定义 分页 标签 的实现

视频1: http://v.youku.com/v_show/id_XNDU0MTU5MjQw.html?from=y1.2-1-105.3.5-2.1-1-1-4

xueshandugu的专栏 817

基于深度学习的鸟类检测识别系统:YOLOv5 + YOLOv8 + YOLOv10 + UI界面 + 数据集

YOLOv5是当前目标检测领域非常流行的模型,具有良好的检测精度和实时推理速度。其网络结构相比前几代YOLO模型进行了优化,尤其是在检测精度和计算效率上有了显著提高。YOLOv5特点高效性:能够在较低的硬件环境下进行实时检测。易于部署和使用:YOLOv5提供了简单的API接口,方便开发者快速集成和使用。优异的精度:在多个数据集上测试,表现出色。本文详细介绍了基于YOLOv5、YOLOv8和YOLOv10的鸟类检测识别系统的设计与实现。

YOLO 1114

如何用Python编程实现算术割圆术?

第10章 割圆术 Python编程要点 from … import …语句 math模块的sqrt()函数 round()函数 10.1 图解九章 {:–}觚( gū ):正多边形。“六觚”即正六边形,“十二觚”即正十二边形。 图10-1 六觚、十二觚、二十四觚 提示 图10-1所示由图解九章源码中的“图解割圆术.py”自动绘制而成,我们可运行脚本文件,查看动态的绘制过程。 割六觚以...

人邮异步社区 3237

通用分页之自定义标签控制前台显示

通用分页之自定义标签控制前台显示前言效果图代码分析总结 前言 通用分页的后台代码在之前的代码中啊: 这里是通用分页后台代码的传送门哦┗( ▔, ▔ )┛ 还有详细介绍自定义标签的博客: |ू・ω・` )自定义标签的详解诶 为什么使用自定义标签是因为通用分页本意是为了节省代码,增加代码的重用性,而自定义标签也是一样的为了增强代码的简洁性和可读性所以使用自定义标签 之前的博客有讲过自定义标签的开发步骤和生命周期这期咱就不讲的太复杂了熬。 效果图 自定义标签做出上面画出的做分页的换页跳转 代码分析 <%@

JiangHu_Java的博客 464

OpenCV-Python实战(11)——OpenCV轮廓检测相关应用

在计算机视觉领域,轮廓通常指图像中对象边界的一系列点。因此,轮廓通常描述了对象边界的关键信息,包含了有关对象形状的主要信息,该信息可用于形状分析与对象检测和识别。在本文中,我们将学习如何利用获取到的轮廓,进行形状分析以及对象检测和识别。

盼小辉丶的博客 1万+

自定义通用分页标签一行代码完成分页(附源码)

首先简单分析一下,我们第一次发送请求肯定是页面初始化的时候这时候页数和显示的条目都是默认的,查询条件也是查询全部。第二次按照“圣墟”进行查询的时候,只有sql语句发生了变化。第三次按照“圣墟”进行查询但是这一次我在查询过后点击下一页,这时候多了两个参数,关键词和页码。以上可知,分页只改变了sql语句和页码值,其他查询条件不变,所以我们只需要在页码和sql语句做文章即可。(这只是基本思想,可能还有类别等等参数)

万维网连五洲,二进制写尽天下事,喜欢结识新伙伴寻找志同道合的朋友,欢迎一起探讨学习 1127

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

通用分页进阶之jsp之自定义标签

2.改造好的pageBean 这是进阶的,想了解前面的请看通用分页之详解】 2. 助手类和tld约束 1.助手类 2.tld约束 3.selevt的使用 4.字符编码过滤器的使用 1.使用注解的方式配置使用过滤器 5.测试前端代码 运行结果

m0_74018330的博客 238

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

自定义通用分页标签01

是不是酱紫?好了,了解完分页标签是啥样之后就容易制作了。

m0_67376124的博客 272

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

自定义通用分页标签02

***分页标签助手类**@author一麟**///分页对象}/***初始化*/@Overridetry{}}/***将分页处理工具、搜索框的隐藏表单和js页面事件处理代码拼接起来**///分页处理工具right;width98%;\">\r\n"+"第"+pageBean.getPage()+"页\r\n"+"共"+pageBean.getTotal()+"条记录\r\n"...

m0_67376124的博客 320

jsp自定义通用分页标签(超详细)

通用分页 servlet,过滤器

weixin_67150631的博客 1106

通用分页(二)

文章目录前言为什么使用自定义标签代码详解效果图总结 前言 分页的后台代码链接通用分页(一) 为什么使用自定义标签 因为通用分页是为了节省代码,增加代码的重用性,自定义标签也是一样。自定义标签原理就不介绍了下方有链接 自定义标签 代码详解 pageBean的优化 pageBean新增了两个属性 private Map<String, String[]> parMap =new HashMap<>();//获取到jsp页面所有的参数以及参数值 private String url;

licmi的博客 456

struts2自定义分页标签

Struts2自定义分页标签   2010-04-08 17:03:39|  分类: struts |  标签: |字号大中小 订阅 最近在学习Struts2,并使用Struts2开发系统。在网上看了好多的struts2的分页,虽然都实现了分页的功能,但是感觉不是非常好,需要我们在每次写分页的时候做很多的工作,而我认为分页应该是一个通用的组件,开发人员在开发的过程中不应

570

两个字母搞定J2EE通用分页标签(四)

作者:张纪豪(转载请注明出处) (五)、视图层的JSP页面输出分页数据 由于Action中往request对象里放了分页数据,那我们在JSP页面就可遍历出来,但同时应将页码信息输出来,我们看看JSP页面是如何处理的? 在WebRoot/WEB-INF/jsp/目录下建立两个jsp文件: list_book.jsp &lt;%@ page language="java" impor...

冰源 1612

通用分页【02】

通用分页【02】 今天我们要把书籍类的数据展示到界面上去。所以今天我们来做一做 关于book这和实体类,可以去看看我的上一篇博客,其中就有后台的一些代码以及book实体类的一些数据 关于通用分页的后台代码 首先咱们创建一个助手类: package com.wt.tags; import java.io.IOException; import java.util.Map; import java...

weixin_43934140的博客 157

Java_自定义标签_分页标签

Java_自定义标签_分页标签 此分页标签总共有7个属性,都是必有的属性, 1、pageSize(每页显示的条数); 2、pageNo(当前页对象,用于分页); 3、url(分页跳转的路径,一般为servlet的路径); 4、name(在路径中分页模型存放的作用域的属性名); 5、scope(作用域); 6.value(实体对象名,便于用EL表达式打印数据); 7、colspa

日月桃子的天地 989

jsp自定义标签分页核心思想

目录自定义标签的开发及使用步骤自定义的生命周期思维导图通用分页核心思路项目演示 自定义标签的开发及使用步骤 创建一个标签助手类继承(BodyTagsuppore) 创建标签库描述文件(tld)添加自定义标签配置 在jsp通过Taglib指令导入标签库描述文件,并通过指定后缀访问此自定义标签 自定义的生命周期思维导图 通用分页核心思路 将上一次查询请求再发一次,只不过页码变了 select * from t_student LTMIT 0,10; //10 代表每页显示多少条数据 // 0 代表其实记录

userwang的博客 269
上一篇: java- JDBC连接各种数据库小结
luojs_java
博客等级 码龄18年 2粉丝 6原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值