jsp标签编程『下』---开发迭代标签

开发一个迭代标签,此标签只可以对list进行迭代(学习)。

IterateTag.java:

package com.keith.tag;

import java.util.Iterator;
import java.util.List;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.TagSupport;

public class IterateTag extends TagSupport {
	// 属性名称
	private String name;
	// 属性保存范围
	private String scope;
	// 每次迭代的对象
	private String id;
	// 所以接受到的数据
	private Iterator<?> iter;

	@Override
	public int doStartTag() throws JspException {
		Object value = null;
		// 是否是page范围
		if ("page".equals(this.scope)) {
			value = super.pageContext
					.getAttribute(name, PageContext.PAGE_SCOPE);
		} else if ("request".equals(this.scope)) {
			// 是否是request范围
			value = super.pageContext.getAttribute(name,
					PageContext.REQUEST_SCOPE);
		} else if ("session".equals(this.scope)) {
			// 是否是session范围
			value = super.pageContext.getAttribute(name,
					PageContext.SESSION_SCOPE);
		} else {
			// 是否是application范围
			value = super.pageContext.getAttribute(name,
					PageContext.APPLICATION_SCOPE);
		}

		//如果是List接口的实例
		if (value != null && value instanceof List<?>) {
			//像List接口进行向下转型
			this.iter = ((List<?>) value).iterator();
			if (iter.hasNext()) {
				super.pageContext.setAttribute(id, iter.next());
				//执行标签体内容
				return TagSupport.EVAL_BODY_INCLUDE; 
			}else{
				//退出标签执行
				return TagSupport.SKIP_BODY;
			}
		} else {
			//不是List接口实例,不处理
			//退出标签执行
			return TagSupport.SKIP_BODY;
		}
	}

	
	@Override
	public int doAfterBody() throws JspException {
		//判断是否还有内容
		if (iter.hasNext()) {
			super.pageContext.setAttribute(id, iter.next());
			//重复执行标签体
			return TagSupport.EVAL_BODY_AGAIN;
		}else{
			//退出标签执行
			return TagSupport.SKIP_BODY;
		}
	}


	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getScope() {
		return scope;
	}

	public void setScope(String scope) {
		this.scope = scope;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public Iterator<?> getIter() {
		return iter;
	}

	public void setIter(Iterator<?> iter) {
		this.iter = iter;
	}

}

 iteratetag.tld:

<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
    version="2.1">
    <!-- 标签库的版本 -->
	<tlib-version>1.0</tlib-version>
	<!-- 为标签苦在TLD中的描述名称 -->
	<short-name>iteratetag</short-name>
	<tag>
	<!-- 表示标签在JSP中的使用名称 -->
 		<name>iterate</name>
 		<!-- 表示这个标签所这项的Class -->
 		<tag-class>com.keith.tag.IterateTag</tag-class>
		<!-- 标签体内容为空 -->
 		<body-content>JSP</body-content>
 		<attribute>
 		<!-- format为属性名 -->
 			<name>id</name>
 			<!-- 表示此值必须设置 -->
 			<required>true</required>
 			<!-- 表示属性值是请求时表达式的结果 -->
 			<rtexprvalue>true</rtexprvalue>
 		</attribute>

 		<attribute>
 		<!-- format为属性名 -->
 			<name>name</name>
 			<!-- 表示此值必须设置 -->
 			<required>true</required>
 			<!-- 表示属性值是请求时表达式的结果 -->
 			<rtexprvalue>true</rtexprvalue>
 		</attribute>
 		
 		<attribute>
 		<!-- format为属性名 -->
 			<name>scope</name>
 			<!-- 表示此值必须设置 -->
 			<required>true</required>
 			<!-- 表示属性值是请求时表达式的结果 -->
 			<rtexprvalue>true</rtexprvalue>
 		</attribute>
	</tag>
</taglib>

 web.xml:

  <taglib>
  		<taglib-uri>iterate</taglib-uri>
  		<taglib-location>/WEB-INF/iteratetag.tld</taglib-location>
  </taglib>

 index.jsp:

<%@ page import="java.util.*" %>
<%@ taglib prefix="iteratetag" uri="iterate"%>

  <body>
	<%
		List<String> all = new ArrayList<String>();
		all.add("java");
		all.add("linux");
		all.add("C");
		request.setAttribute("all",all);
	 %>
	<iteratetag:iterate name="all" scope="request" id="url">
		${url }<br />
	</iteratetag:iterate>
  </body>
【RH850/U2A】:功能安全 功能安全相关 阅读详情

相关推荐

数据结构之栈(Stack)的实现详解

堆栈是一种线性数据结构,其插入新元素和删除现有元素都发生在堆栈的顶部。栈(Stack)按照"后进先出"(Last-In-First-Out,LIFO)的原则存储和访问数据。栈类似于现实生活中的堆叠物体,比如一摞书或者一堆盘子。

swadian2008的博客 3813

JSP:自定义标签——开发实例[4]

  【实例111】  开发嵌套的标签:haveChildTag  实际工程中往往需要多个标签来配合完成一定的功能,嵌套的标签存在父子关系,其中,父为外层标签,子为内层标签。本实例将用两个简单的标签来演示,父标签则作出逻辑判断,如果isOutput属性为true,则输出实例108中的标签helloTag;如果为false,则不输出。  (1)第一步:开发标签实现类。  内层的标签helloTag

KingKumg的专栏 640

基于模糊神经网络实现水质评价预测 - Matlab源码

首先定义输入层、隐含层和输出层的节点数,并初始化权重和阈值,然后开始训练模型,在每轮训练中通过比较模型的输出值与实际值的误差来更新权重和阈值,直到误差达到最小值,为了提高模型的性能,我们可以采用交叉验证等技术进行优化。首先需要准备好数据集,使用的是嘉陵江的水质监测数据集,数据集包含了多个指标,如 pH 值、溶解氧、总氮、总磷等,以及相应的水质等级,我们需要将数据集分为训练集和测试集。在当今环境日益恶化的情况下,水质监测变得越来越重要,模糊神经网络作为一种新型的。

weixin_50547796的博客 147

开发迭代标签

开发一个迭代标签,此标签只可以对list进行迭代(学习)。 IterateTag.java: Java代码   package com.keith.tag;       import java.util.Iterator;    import java.util.List;       import javax.servlet.jsp.JspExcep...

caodaoxi的专栏 206

智能车复工日记【3】:图像处理——基本扫线和基本特征提取和十字补线

目录前言基本扫线(除了进入环岛状态或者坡道或者十字路口的普通扫线)基本数据和初步特征进一步特征提取1、计算并且显示前n行左右线各丢失数目(不break和break的都有)2、计算左右线方差(以右线为例)【a】计算右线曲率(选三个点:r_start、中点、break点)【b】如果右线曲率在一定的范围,就进行右线拟合,从空白行开始计算斜率,否则则从0行开始计算 前言 图像大小185*70,通过扫线获取.........

hanhan的博客 3万+

PCL 点到面的ICP算法【2024最新版】

经典的点到面的ICP算法。博客长期更新,本文最新更新时间为:2024年10月18日。

点云侠的博客 36万+

struts2--动态方法调用的三种方式

一般情况下,我们是通过实现action中execute方法来实现请求处理,这样子一个action中就只能写一个方法,当我需要实现很多方法的时候写多个action显然是很不合理的,因此就需要使用动态调用来实现。方式一:指定method属性 也就是说通过在struts.xml文件中通过配置action标签的method属性来设置即可。 但是这个方法有一个缺陷,当一个action中有很多方法的时候就需

暖心~的博客 1万+

微信小程序 - 解决请求报错 request:fail errcode:-201 cronet_error_code:-201 error_msg:net::ERR_CERT_DATE_INVALID

微信小程序报错“request:fail errcode:-201 cronet_error_code:-201 error_msg:net::ERR_CERT_DATE_INVALID“,微信小程序请求报错,微信小程序errcode:-201,服务器报错,无法调用接口,微信小程序真机https请求失败,微信小程序wx.request接口报错,小程序真机调试运行接口都报错了,真机测试下网络请求都不行了且报错,证书没问题依旧报错,检查HTTPS证书,ssl证书,使用浏览器测试访问证书是正常的,不是证书问题,请

🏆 前端领域优质创作者 1万+

struts2中手动完成输入校验(2)重写validateXXX()方法

1.编写java类,代码如下: package com.koubei; import com.opensymphony.xwork2.ActionSupport; public class Regist extends ActionSupport{ private Str

Sapphire_aling的专栏 3208

AI: 机器学习的模型是如何训练的?(在试错中学习)

一句话理解机器学习一般训练过程 :通过有标签样本来调整(学习)并确定所有权重Weights和偏差Bias的理想值。 训练的目标:最小化损失函数 (损失函数下面马上会介绍) 机器学习算法在训练过程中,做的就是:检查多个样本并尝试找出可最大限度地减少损失的模型;目标就是将损失(Loss)最小化 在这里插入图片描述 上图就是一般模型训练的一般过程(试错过程),其中 模型: 将一个或多个特征作为输入,然后返回一个预测 (y’) 作为输出。为了进行简化,不妨考虑一种采用一个特征并返回一个预测的模型,如下公式

HowieXue 薛永浩的博客 3万+

提示工程架构师干货:AI上下文工程在社交媒体舆情溯源中的应用

在舆情溯源中,“上下文”不是单一的“文本内容”,而是多维度、多源的信息集合溯源时间:从事件爆发到找到源头,只用了24小时(传统方法需要3-5天);溯源准确性:100%(通过人工验证确认);后续行动:品牌X发布了澄清声明,揭露了品牌Y的恶意行为,舆情在48小时内平息。社交媒体舆情溯源是一个“复杂的系统工程”,需要结合数据、模型、上下文理解。AI上下文工程的出现,让我们从“被动应对”转向“主动溯源”,从“模糊判断”转向“精准分析”。

Java大师兄的博客 813

javaee之标签的运用

在javaee中,需要了解的还有其丰富的核心标签库,包括c标签、struts标签.... 现在先来了解标签的底层机制: package gz.itcast.tags.cases; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.SimpleT

css1223mjf的专栏 1847

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

jsp----标签编程(JSTL)

jsp----标签编程(JSTL) 标签编程简介 JSP的开发是在HTML代码中嵌入了大量的Java代码,但是这样一来会使得JSP页面中充满了Java程序,修改或维护起来非常的不方便, 定义一个简单的标签----空标签 要想实现一个标签,可以直接继承javax.servlet.jsp.tagext.TagSupport类,如果要定义的标签内没有标签体,则直接覆...

qq_33717490的博客 253

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

JSP标签编程 2

本章目标 JSP标签编程     定义有属性的标签 本章目标 理解标签中熟悉的设置方法 理解标签配置文件中的属性定义格式         上面已经清楚的知道了,对于一个标签的开发需要标签的支持了,标签库的描述文件、web.xml文件中进行配置、之后在JSP中进行使用          但是对于属性:,  现在自己的标签也可以定义属性操作

tanyit的专栏 1085

假人有限元模型

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

JSP/Servlet||JSTL标准标签库

JSTL - JSP 标准标签库 JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。 JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。 根据JSTL标签所提供的功能,可以将其分为5个类别。 配置JSTL标签库的jar到类路径 把jstl.jar和s...

JockLiu的博客 435

BCSP-玄子Java开发之Java Web编程CH08_使用EL和JSTL简化JSP页面

BCSP-玄子Java开发之Java Web编程CH08_使用EL和JSTL简化JSP页面

qq_62283694的博客 498

JSPEL表达式JSTL标签库

只有沙雕1传过去 原因:作用域不同 request只能作用于当前页面 若要传递则 用转发方法 但只能转发沙雕 因为el表达式会从jsp页面去到servlet中查找,从小到大,page页面没有,request中有就停止查找,不继续在会话中查找了 若要改变查找作用域,则需要给一个范围 这时候所查到的就是沙雕1了 EL 全名为Expression Language。EL主要作用:    1、获取数据      EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的w...

m0_64899073的博客 215

JSP自定义标签详解

JSP自定义标签详解一、引入标签其实在JSP中我们已经使用过了几个标签,比如、等;这些标签都是预先定义好的,如果我们需要自定义标签,就需要学习标签编程。 标签编程的优点就是灵活性+封装性。 灵活性体现在属性的赋值上,可以赋任意值。比如 //A处可以赋任意的URL; 封装性体现在内部的行为的封装,因为标签是用一个类实现的,因此类的方法中能够包含任意复杂的动作。

real.me 1479

JSP标准标签库、通用标签

JSP标准标签库、通用标签 JSP标准标签库(JSP Standard Tag Library,JSTL)是实现Web应用程序中常见的通用功能的定制标签库集,程序员使用JSTL标签来避免在JSP页面中使用脚本。本章将介绍JSTL的应用基础、如何从表示层删除源代码来简化软件的维护。 JSTL概述 JSTL英文全称是“JSP Standard Tag Library”,即JSP标准标

fengdongkun的专栏 1151

第九章自定义标签第四节自定义有标签体的标签

IterateTag.jsp<%@page import="java.util.*"%> <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib prefix="please" uri="/WEB-INF/lang.tld"%> <!DOCTYPE h

please 346

后端学习之 JSP 和 JSTL

最近学习的内容较多,写博客的时间也变少了呢~~ 今天笔者接着上次的Sevlet,给大家带来新的内容,JSP 和 JSTL,内容可能有点多,请大家看看需要用到的就行。 JSP JSP的基础语法 简介 JSP:Java Server Page SUN 公司提供的动态网页编程技术,是 Java Web 服务器端的动态资源。 它相比 html 而言,html 只能为用户提供静态数据,而 Jsp 技术允许在页面中嵌套 java 代码,为用户提供动态数据。 相比 servlet 而言,servlet 很难

人在江湖飘,哪能不挨刀 556

javaee学习之路(十五)JSP编程总结

1.1 Tip:如何查找JSP页面中的错误   JSP页面中的JSP语法格式有问题,导致其不能被翻译成Servlet源文件,JSP引擎将提示这类错误发生在JSP页面中的位置(行和列)以及相关信息。   JSP页面中的JSP语法格式没有问题,但被翻译成的Servlet源文件中出现了Java语法问题,导致JSP页面翻译成的Servlet源文件不能通过编译,JSP引擎也将提示这类错误发生在JSP页

fandong12388的专栏 1603

JSP标准标签库

SP标准模板库(JSTL)是SUN公司发布的一个针对JSP开发的新组件。JSTL允许你使用标签(tags)来进行JSP页面开发,而不是使用多数JSP程序员已经习惯了的scriptlet代码方式开发。 JSTL通常被认为是一种单标签库。但JSTL实际上有4个标签库。这些标签库被概括为如下:  1、核心标签库(core),包含一些Web应用的必要的标签。核心标签库的实例包括循环,表达式

凌雪的博客 948

javaweb学习总结(二十七)——jsp简单标签开发案例和打包

一、开发标签库 1.1、开发防盗链标签   1、编写标签处理器类:RefererTag.java 1 package me.gacl.web.simpletag; 2 3 import java.io.IOException; 4 import javax.servlet.http.HttpServletRequest; 5 import javax....

weixin_30783629的博客 148

JDBC+Servlet+JSP整合开发之28-JSP_标准标签(JSTL)

–JSTL 简介 –JSTL的分类 ?基本标签 c:out 的用法 ?基本标签 c:set 的用法 ?条件判断标签 c:if 的用法 ?条件判断标签 c:choose、c:when、c:otherwise 的用法 ?迭代循环c:forEach的用法 --------------------------------------------------------------------- –JS...

weixin_34364071的博客 94

Jsp自定义标签1

1) 使用自定义标签控制页面内容(标签体)是否输出,利用doStartTag()的返回值控制 return this.SKIP_BODY; //忽略标签体 return this.EVAL_BODY_INCLUDE; //执行标签体 2) 控制整个jsp的输出 利用doEndTag()的返回值控制 return this.SKIP_PAGE;  //跳过页面标签后余下的jsp代码 re

me15933的专栏 338
上一篇: jsp标签编程『下』---TagSupport类
下一篇: jsp标签编程『续』---简单开发
keithJava
博客等级 码龄16年 2粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值