JSP标签分页实现

JSP自定义标签实现分页与当前位置导航完整项目 自定义标签是JSP开发中非常关键的一环,它不仅提升了代码的可维护性,还增强了页面的可扩展性。通过自定义标签,开发者可以将复杂的业务逻辑封装成简单的标签调用,提高页面的可读性和开发效率。本章将围绕自定义标签的开发流程展开,涵盖其基本结构、执行机制、开发环境搭建以及具体示例实现,帮助读者系统性地掌握这一关键技术。自定义标签的核心结构包括两部分:标签处理类(Tag Handler Class)和标签库描述文件(TLD)。 阅读详情

网也中经常会用到分页,分页的实现有很多中。从数据库中回去分页数据的方法一般都差不多,主要就是怎么在网页上呈现出来的差别。一般我们会定义一个实体类,他将存放所有与分页相关的数据和设置。在使用struts2的时候可以在后台直接将将数据填充到分页实体类对象中,然后可以在结果页面通过标签活着EL表达式来获取相应的信息来完成分页显示。还有一种就是我们可以通过JSP标签来完成分页的显示。

首先我们定义一个实体类,他包含一些设置信息和承载我们要显示的分页数据。

public class PageBean {
	
	private int pageSize;//每页大小
	private int totalrows;//总记录数
	private int pageNum;//总页数
	private int curPage;//当前页码
	
	private List items;//存放数据
	
	//默认构造器,初始化成员变量
	public PageBean(int totalRows, int curPage,List items){
		this.pageSize = 10;
		this.totalrows = totalRows;
		this.curPage = curPage;
		this.pageNum = (int) Math.ceil((double)totalRows / pageSize);
		this.items = items;
	}

	//省略get/set方法
}

然后我们就开始编写我们的分页标签。我们定义一个类,让他继承TagSupport类,然后重写其中的部分方法就可以了:

public class PagerTag extends TagSupport {

	private String value = "pb";// 存放数据实体的名字

	public void setValue(String value) {
		this.value = value;
	}

	@Override
	public int doStartTag() throws JspException {
		JspWriter out = pageContext.getOut();
		String outStr = makeString();
		try {
			out.write(outStr);
		} catch (IOException e) {
			e.printStackTrace();
		}

		return SKIP_BODY;
	}
	
	private String makeString() {

		// 获取到存放在request中的数据实体
		Object p = pageContext.getRequest().getAttribute(
				value);
		PageBean pageBean = (PageBean) pageContext.getRequest().getAttribute(value);
		
		StringBuffer sb = new StringBuffer();
		
		if (pageBean != null && pageBean.getItems() != null
				&& pageBean.getItems().size() > 0) {

			sb.append("共" + pageBean.getCurPage() + " / "
					+ pageBean.getPageNum() + "页");
			//首页 上一页
			if (pageBean.getCurPage() > 1) {
				sb.append("<a href='?page=1'>首页</a>");
				sb.append("<a href='?page=" + (pageBean.getCurPage()-1) + "'>上一页</a>");
			}
			
			//循环显示中间页码,这里也可控制最大只显示多少页码
			for (int i = 1; i < pageBean.getPageNum() + 1; i++) {

				if (i == pageBean.getCurPage()) {
					sb.append(" " + i + " ");
				} else {
					sb.append("<a href='?page=" + i + "'> " + i + " </a>");
				}
			}
			
			//下一页 末页
			if(pageBean.getCurPage() != pageBean.getPageNum()){
				sb.append("<a href='?page=" + (pageBean.getCurPage() + 1) + "'>下一页</a>");
				sb.append("<a href='?page=" + pageBean.getPageNum() + "'>末页</a>");
			}

		}
		
		return sb.toString();
	}

}

我们这里通过在value属性来从Requst中获取之前我们从后台填充了数据的PageBean对象。

标签类写完了,我们还要编写对应的tlg文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
	<tlibversion>1.2</tlibversion>
	<jspversion>1.1</jspversion>
	<shortname>page</shortname>
	<uri>/luo_pager</uri>
	<tag>
		<name>pager</name>
		<tagclass>com.luojing.pager.PagerTag</tagclass>
		<bodycontent>empty</bodycontent>
		<attribute>
			<name>value</name>
			<required>true</required>
			<rtexprvalue>false</rtexprvalue>
		</attribute>
	</tag>
</taglib>

然后在web.xml中进行注册:

<jsp-config>
		<taglib>
			<taglib-uri>/luo_pager</taglib-uri>
			<taglib-location>/WEB-INF/page_taglib.tld</taglib-location>
		</taglib>
	</jsp-config>

我们再编写一个测试用的Servlet:

public class PagerServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {

		int curPage = Integer.parseInt(req.getParameter("page") == null ? "1"
				: req.getParameter("page"));
		List list = new ArrayList();
		
		int start = (curPage -1)* 10 + 1;
		int end = start + 10 > 26 ? 26 : start + 10;
		for(int i = start; i < end; i++){
			list.add(i);
		}

		PageBean pageBean = new PageBean(25, curPage, list);
		req.setAttribute("pb", pageBean);
		
		
		RequestDispatcher rd = req.getRequestDispatcher("index.jsp");
		rd.forward(req,resp);
	}
}

这样我们就可以在我们的JSP页面中使用我们自己的标签来完成分页条的显示了。

<%@ page language="java" import="java.util.*,com.luojing.pager.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="luo" uri="/luo_pager" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>pager test</title>
  </head>
  
  <body>
  	<%
  		PageBean p = (PageBean) request.getAttribute("pb");
  		List<Integer> list = p.getItems();
  		for(Integer i : list){
  			pageContext.getOut().write("值为: " + i + "<br/>");
  		}
  	
  	%>
    <luo:pager value="pb"/>
  </body>
</html>

这里为了方便,我直接在JSP页面中循环输出PageBean对象中携带的数据。

效果如下:


时间匆忙,页面效果做的比较丑陋,不过所需要的功能基本都能够实现。如果页面还需要传递其他参数,那么最好将page参数(指定要显示的页码)放在查询字符串的最后,这样可以在分页的时候保留其他的参数。以前我做分页没用过使用JSP标签,对JSP标签也不是很熟悉,今天就当学习一下JSP自定标签吧。

JSP与Java自定义标签实战:实现分页、当前位置与数据循环遍历 自定义标签(Custom Tag)是JSP技术中一种扩展机制,允许开发者通过Java类定义可复用的标签行为,从而将复杂的业务逻辑从JSP页面中剥离出来,提高代码的可维护性和可读性。与传统的JSP脚本(如<% %>)相比,自定义标签提供了更清晰的结构和更强的封装能力。自定义标签本质上是一个Java类,它实现了特定的接口或继承了特定的类(如SimpleTagTagTagSupport。 阅读详情

相关推荐

关于SVPWM七段式五段式调制后的相电压和线电压波形——大疆DJI技术笔试

1.SVPWM七段式/五段式调制的相电压和线电压波形 脉宽调制(PWM)在并网变流技术中得到了广泛的应用。与正弦脉宽调制(SPWM)的控制方法相比,SVPWM方法具有直流侧电压利用率高,电压谐波小,易于数字化实现等显著的优点,从而使SVPWM在实际的应用中越来越普遍。TMS320F28335是32位浮点的DSP控制器,具有150MHz的高速处理能力,18路PWM输出,与前几代数字信号控制器相比,性能平均提高了50%。其中具体的SVPWM理论实现的原理,请参考我的博客永磁同步电机的矢量控制策略(七)一一一SV

昔时扬尘处 2万+

JSP Display标签的使用

Display Tag Lib是一个标签库,用来处理jsp网页上的Table,功能非常强,可以对的Table进行分页、数据导出、分组、对列排序等等,反正我在做项目时需要的功能它都给我提供了,而且使用起来非常的方便。能够大大减少代码量。 介个是Display Tag的官方网站http://displaytag.sourceforge.net。 首先当然是要下载它的jar包了,这里可以下载到最...

大头 2988

Vivado工程备份实战:两种方法快速迁移Block Design(附路径避坑指南)

本文详细介绍了Vivado工程中Block Design(BD)备份与迁移的两种核心方法:文件夹直接复制法与TCL脚本生成法。针对FPGA工程师在项目迁移或团队协作时常见的IP丢失、路径报错等问题,提供了从原理到实战的操作指南与路径避坑策略,确保设计可复现与高效协作。

pz890123的博客 1300

JSP的基本标签

默认跳转界面,jsp的基本标签

weixin_67235801的博客 9433

S32K144之芯片锁死解锁——关闭debug端口

S32K144之芯片锁死及解锁 经常捣鼓单片机就会发现,时常会因为某些操作不当导致芯片锁死情况的发生,通过Jlink我们可以读到芯片的ID,但是无法进行Debug,这很是让人苦恼。 基于S32K144的芯片锁死,一般有如下几种可能: 1、时钟配置异常,过高的配置时钟频率以及不配置时钟,都有可能造成芯片保护锁死,我就曾经因为不注意把时钟配置代码注释掉,导致芯片锁死。 2、我是微软雅黑烧写断电,如果在...

weixin_41935674的博客 1万+

昇腾Atlas Duo 300I推理卡实战:从零部署Qwen大模型推理服务

本文详细记录了在华为昇腾Atlas Duo 300I推理卡上,从零部署Qwen1.5-14B-Chat大模型推理服务的完整实战过程。涵盖环境准备、MindIE容器配置、CANN工具链安装、服务启动与API测试等关键步骤,并分享了性能观察与排错经验,为国产AI算力平台部署LLM推理服务提供了实用指南。

weixin_29084231的博客 1233

jsp标签

jsp标签

weixin_67677668的博客 783

卡诺图化简法注意事项+竞争冒险知识点总结

今天反思以下卡诺图化简法中的注意事项。 卡诺图看起来简单,但如果不熟悉的话很容易出错,因此要对画圈的规则比较熟悉。

weixin_42415266的博客 1万+

同一个页面跳转显示不同的数据

同一个页面跳转显示不同的数据 1.最近在做一个需求的时候有涉及到不同页面的同一个按钮在同一个页面显示不同的数据,大概的起因是A页和B页的大体数据和模板是一样的,但是在B.JSP页面的一些数据是只需要进行只读的。(B页是显示不同数据的jsp页面),本来是打算在创建一个页面C.JSP,把B.jsp的数据迁移过去,然后对部分数据进行只读。但是后面想着如果创建很多的jsp,会导致资源浪费,还有就是创建多个jsp页面到后来自己都有点晕,所以就想到去在同一个jsp页面去显示不同的数据。 2.步骤如下: 1).先在A 页

weixin_44227650的博客 1706

【零基础入门unity游戏开发——2D篇】大大简化了地形创建流程,减少Rule Tile的使用 —— AutoTile自动平铺瓦片的使用介绍

Unity 2D游戏开发中的AutoTile技术详解 摘要:本文详细介绍了Unity 2D游戏开发中的AutoTile技术,这是一种智能瓦片系统,能够自动处理地形和场景拼接。文章首先讲解了AutoTile的基本概念和优势,然后分步骤指导读者如何安装2D Tilemap Extras包、创建AutoTile、设置参数和绘制遮罩。通过实际案例演示了AutoTile的使用方法,并比较了AutoTile与Rule Tile的适用场景。最后指出AutoTile虽然使用方便,但对素材要求较高,开发者应根据项目需求选择合

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 727

基于OpenCV实现暗通道先验去雾算法及改进,效果惊人

深度技术文,前方高能

公号:一条coding 2万+

jsp分页标签的简单实现

以前一直以为写tag非要写.java,后来看了springside的tag实现,竟然可以直接用.tag文件,以jsp方式来写,这就跟原来我用asp.net写用户控件一样方便了,所以就写一个简单的分页组件。 效果图: tag代码:(pager.tag必须放在WEB-INF/tags/文件夹中) <% long begin = Math.max(1, curIndex

tomatozq的专栏 1万+

详解Agent Skills:让AI拥有更多专业能力(什么是Agent Skills?如何创建?如何使用?如何获取?)

本文分享如何将零散指令沉淀为可复用的 AI 能力模块🧩,介绍什么是Agent Skills?如何创建?如何获取?📚

XiaoqiangClub的博客 1269

jsp自定义标签实现分页

jsp自定义标签分页

4478

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

利用JSP自定义标签实现分页复用

首先看一下运行效果如下: 第13页为最后一页,故下一页和尾页为灰显状态.下面直接上源码: 首先我们需要在WEB-INF/tld/目录下创建page.tld文件如下: 1.0 1.2 page http://www.KinderWang.com/taglibs/page htmlPage com.medicine.common.page.PageTag JS

889

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

使用JSP自定义标签实现简易分页功能

今天学习了JSP的自定义标签的3个创建方式特此开始记录下来 DB类 package com.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; public class dbUtil { ...

qq_42638025的博客 271

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Google分页功能的jsp标签实现

 下面是jsp代码<%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";System.out.println("&&&path&"+p

yuzhu2008的专栏 911

JSP标签实现分页功能(ORM-mybatis)

分页对象package com.pcitc.modules.pagination;import java.io.Serializable; import java.util.Arrays; import java.util.List; /** * 通用分页类 * @author mi * * @param <T> */ public class Pagination<T> implemen

妄想蓝天 1819

jsp struts2 标签实现分页

第一种 java 代码 package com.action;      import org.apache.struts2.convention.annotation.Action;   import org.apache.struts2.convention.annotation.Namespace;   import org.apache.struts2.conven

清叶 的专栏 1160

jsp EL表达式结合JSTL标准标签实现分页

http://java.sun.com/jstl/core_rt" %>http://java.sun.com/jstl/sql_rt" %>%@taglib uri="http://java.sun.com/jstl/fmt_rt" prefix="fmt"%>使用SQL标签"sun.jdbc.odbc.JdbcOdbcDriver" url ="jdbc:odbc:accp" user="

zp8126的专栏 5832

超简单的自定义标签封装实现的JSP分页显示功能

超简单的JSP分页显示功能,页码显示和跳转控制。 使用自定义标签封装实现的,你只要一行代码就可以用好了。可自定义显示样式和个性。 下载地址 http://download.youkuaiyun.com/detail/wzj26638719/5698893

wzj26638719的专栏 1332

ssm+jsp+自定义标签实现分页,可以通用(前端实现)

近期做了一些分页方面的开发,大致梳理一下 1 jsp页面上关于分页的代码 <tr> <td colspan="9"> <ule1:pagination url="${basePath}/csitem/item/queryOnlineItem.action?method=test" pageIndex='${currentPage}' totalP...

weixin_30871701的博客 291

jsp自定义标签+jpa+hibernate+struts2实现的分页

先看web.xml代码: &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi

lpm528的博客 155
上一篇: JSP标签分页实现
下一篇: JdbcTemplate 排序查询结果不一致问题
jdluojing
博客等级 码龄17年 79粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值