J2EEJSP标签02Foreach标签select

目录

一.foreach标签

编写助手类

编写tld

测试数据辅助类

 在页面上使用标签

二.select

编写助手类

编写tld

 在页面上使用标签


一.foreach标签

  • 编写助手类

public class ForeachTag extends BodyTagSupport {//存放数据源private List<?> items;//每次循环获取的对象放入pageContext中,并以var属性的值为key进行保存//示例: 页面上标签var属性指定为item,则每次循环取出的对象(obj)将执行如下://pageContext.setAttribute("item", obj); //页面中可以使用EL表达式取出对象中的属性, 如: ${item.name}private String var;public List<?> getItems() {return items;}public void setItems(List<?> items) {this.items = items;}public String getVar() {return var;}public void setVar(String var) {this.var = var;}@Overridepublic int doStartTag() {if(Objects.isNull(this.items) || this.items.size() == 0) {return SKIP_BODY;}Iterator<?> iterator = this.items.iterator();Object obj = iterator.next();this.pageContext.setAttribute(var, obj);this.pageContext.setAttribute("iterator", iterator);return EVAL_BODY_INCLUDE;}@Overridepublic int doAfterBody() {Iterator<?> it = (Iterator<?>)this.pageContext.getAttribute("iterator");if(it.hasNext()) {this.pageContext.setAttribute(var, it.next());return EVAL_BODY_AGAIN;}return SKIP_BODY;}}
  • 编写tld

<!DOCTYPE taglibPUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN""http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<!-- 标签库描述符 -->
<taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor"><tlib-version>1.0</tlib-version><jsp-version>1.2</jsp-version><short-name>Simple Tags</short-name><uri>/zking</uri>
<tag><!-- 标签名 --><name>foreach</name><!-- 标签助手类 --><tag-class>com.zking.tagdemo.tag.ForeachTag</tag-class><!-- 标签的内容类型:empty表示空标签,jsp表示可以为任何合法的JSP元素 --><body-content>jsp</body-content><attribute><!-- 属性名, OutTag类中的val属性相匹配 --><name>items</name><!-- 表示该属性为必要的属性 --><required>true</required><!-- 该属性可以接受EL表示式的值 --><rtexprvalue>true</rtexprvalue><!-- 标签描述,用于说明标签的作用 --><description>out标签test属性,用于输出test的值</description></attribute><attribute><!-- 属性名, OutTag类中的val属性相匹配 --><name>var</name><!-- 表示该属性为必要的属性 --><required>true</required><!-- 该属性可以接受EL表示式的值 --><rtexprvalue>true</rtexprvalue><!-- 标签描述,用于说明标签的作用 --><description>out标签test属性,用于输出test的值</description></attribute></tag>
  • 测试数据辅助类

public class Book {private int id;private String name;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}
public class TestData {public static List<Book> getBooks() {List<Book> books = new ArrayList<>();Book b1 =  new Book();b1.setId(1);b1.setName("水浒传");Book b2 =  new Book();b2.setId(2);b2.setName("红楼梦");Book b3 =  new Book();b3.setId(3);b3.setName("西游记");books.add(b1);books.add(b2);books.add(b3);return books;}}
  •  在页面上使用标签

<%@page import="com.zking.mvc.test.*,java.util.List" %>
<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%>
<%@taglib prefix="z" uri="/zking" %>
<!DOCTYPE html">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body><h1><%=System.currentTimeMillis()%></h1><z:hello/><!-- out --><z:out val="adb"/><%request.setAttribute("name", null);%><z:out val="${name}" defaultVal="test"/><p><!-- if --><z:if test="${100 == 100}">测试if(100 == 100)</z:if><z:if test="${100 == 1}">测试if(100 == 1)</z:if><p><!-- foreach --><%//获取测试数据List<Book> books = TestData.getBooks();//放入request对象中request.setAttribute("books", books);%><z:foreach items="${books}" var="book"><p>${book.id } - ${book.name }</p></z:foreach></body>
</html>

二.select

编写助手类

package com.zking.tagdemo.tag;import java.util.Map;import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;public class SelectTag extends BodyTagSupport{private String name;private Map<String, String> options;private String selectedValue;public String getName() {return name;}public void setName(String name) {this.name = name;}public Map<String, String> getOptions() {return options;}public void setOptions(Map<String, String> options) {this.options = options;}public String getSelectedValue() {return selectedValue;}public void setSelectedValue(String selectedValue) {this.selectedValue = selectedValue;}@Overridepublic int doStartTag() throws JspException {JspWriter out = this.pageContext.getOut();try {out.print("<select name=\""+name+"\">");for (String key : options.keySet()) {if(key.equals(selectedValue)) {out.print("	<option value=\""+key+"\" selected>"+options.get(key)+"</option>");}else {out.print("	<option value=\""+key+"\" >"+options.get(key)+"</option>");}}out.print("</select>");} catch (Exception e) {e.printStackTrace();}return SKIP_BODY;}}

编写tld

<!DOCTYPE taglibPUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN""http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<!-- 标签库描述符 -->
<taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor"><tlib-version>1.0</tlib-version><jsp-version>1.2</jsp-version><short-name>Simple Tags</short-name><uri>/zking</uri>
<tag><!-- 标签名 --><name>selectTag</name><!-- 标签助手类 --><tag-class>com.zking.tagdemo.tag.SelectTag</tag-class><!-- 标签的内容类型:empty表示空标签,jsp表示可以为任何合法的JSP元素 --><body-content>empty</body-content><attribute><!-- 属性名, OutTag类中的val属性相匹配 --><name>name</name><!-- 表示该属性为必要的属性 --><required>true</required><!-- 该属性可以接受EL表示式的值 --><rtexprvalue>true</rtexprvalue><!-- 标签描述,用于说明标签的作用 --><description>out标签test属性,用于输出test的值</description></attribute><attribute><!-- 属性名, OutTag类中的val属性相匹配 --><name>options</name><!-- 表示该属性为必要的属性 --><required>true</required><!-- 该属性可以接受EL表示式的值 --><rtexprvalue>true</rtexprvalue><!-- 标签描述,用于说明标签的作用 --><description>out标签test属性,用于输出test的值</description></attribute><attribute><!-- 属性名, OutTag类中的val属性相匹配 --><name>selectedValue</name><!-- 表示该属性为必要的属性 --><required>false</required><!-- 该属性可以接受EL表示式的值 --><rtexprvalue>true</rtexprvalue><!-- 标签描述,用于说明标签的作用 --><description>out标签test属性,用于输出test的值</description></attribute></tag>

 在页面上使用标签

<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.List"%>
<%@page import="com.zking.tagdemo.tag.Book"%>
<%@page import="com.zking.tagdemo.tag.BookTest"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@taglib prefix="z" uri="/zking" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>sname}-${book.tid}</p></z:foreach><!-- 模拟数据 --><%request.setAttribute("name", "瑶姐");Map<String,String> map = new HashMap<>();map.put("1", "宝宝");map.put("2", "辉辉");map.put("3", "杰少");request.setAttribute("options", map);%><select name="type"><option value="1">药药</option>	<option value="2">理论</option>	<option value="3" selected="selected">付费</option>	</select><z:selectTag name="selectName" options="${options}" selectedValue="3"/></body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/3851.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

餐饮业油烟在线监测系统的具体应用 安科瑞 许敏

摘要&#xff1a;本文利用物联网技术&#xff0c;构建了一套餐饮企业智能油烟在线监测系统&#xff0c;该系统前台由厨房端和管道端组成&#xff0c;通过网关接入云平台管理系统&#xff0c;实时监控烟道阀门的启闭、变频风机的启停与风速及功率调节、油烟浓度数据等。结合动态…

随手笔记——如何手写高斯牛顿法

随手笔记——如何手写高斯牛顿法 说明源代码 说明 将演示如何手写高斯牛顿法 源代码 #include <iostream> #include <chrono> #include <opencv2/opencv.hpp> #include <Eigen/Core> #include <Eigen/Dense>using namespace std; using names…

HBase

一 HBase简介与环境部署 1.1 HBase简介&在Hadoop生态中的地位 1.1.1 什么是HBase HBase是一个分布式的、面向列的开源数据库HBase是Google BigTable的开源实现HBase不同于一般的关系数据库, 适合非结构化数据存储 1.1.2 BigTable BigTable是Google设计的分布式数据存储…

React总结-01

要点 create app use npx and lanchfolder File structure and main entry point in reactwhat is jsxuseState npx create-react-app my-app cd my-app npm start开始你的第一个react程序 删除除了index.js其他文件 import React from react; import ReactDOM from react-d…

【Linux工具】编译器、调式器、项目自动化构建工具以及git的使用3(GDB调试器的基础使用)

【Linux工具】编译器、调式器、项目自动化构建工具以及git的使用3&#xff08;GDB调试器的基础使用&#xff09; 目录 【Linux工具】编译器、调式器、项目自动化构建工具以及git的使用3&#xff08;GDB调试器的基础使用&#xff09;背景gdb的一些指令gdb实际运用显示代码运行程…

【NLP】transformers的位置编码

一、背景 本文是“实现的变压器”系列的第二篇。它从头开始引入位置编码。然后,它

Day4 网络流与二分图

之前那篇博客是在入门网络流时写的&#xff0c;现在对网络流重新有了一定的理解。 1. 最大流 FF 增广思想 Ford–Fulkerson 增广&#xff0c;核心即不断找增广路并增广。 dfs 实现 // FF brute #include <bits/stdc.h> #define int long longusing namespace std;in…

OkHttp原理和机制讲解

OkHttp原理和机制讲解 本文链接&#xff1a;https://blog.csdn.net/feather_wch/article/details/131767285 1、OkHttp的原理和机制包括哪些部分&#xff1f; 设计模式的运用&#xff1a;建造者模式、外观模式、责任链模式整体流程分发器(调度机制)TCP链接复用(复用机制)拦截…

2023米哈游图像算法暑期实习面经

来源&#xff1a;投稿 作者&#xff1a;LSC 编辑&#xff1a;学姐 本文不可转载 违者必究 1.自我介绍 2.能实习多久&#xff1f;公司在心目中的地位排序等 3.是否了解公司&#xff0c;用他们的产品吗&#xff1f;(比如原神) &#xff0c;喜欢游戏吗&#xff1f; 我只知道公司…

划片机的作用将晶圆分割成独立的芯片

划片机是将晶圆分割成独立芯片的关键设备之一。在半导体制造过程中&#xff0c;晶圆划片机用于将整个晶圆切割成单个的芯片&#xff0c;这个过程被称为“晶圆分割”或“晶圆切割”。 晶圆划片机通常采用精密的机械传动系统、高精度的切割刀具和先进的控制系统&#xff0c;以确保…

web-其他注入

堆叠注入 mysqli_query()只能执行一条SQL语句&#xff0c;mysqli_multi_query()可以执行多条语句 堆叠注入与联合查询的区别&#xff1a;union 执行的语句类型是有限的&#xff0c;只能执行 select &#xff0c;堆叠注入可以执行任意语句。但使用堆叠注入&#xff0c;需要后端…

恢复idea删除的git本地文件

idea中删除git本地文件无法远程拉取pull已删除文件的问题 当前本地库处于另一个分支中&#xff0c;需将本分支Head重置&#xff0c;git 强行pull并覆盖本地文件 解决方式一&#xff1a; git fetch --all git reset --hard origin/master git pull解决方式二&#xff1a; git…

Oracle密码文件

Oracle密码文件 Oracle密码文件用于用户远程管理数据库验证 我们可以通过将普通用户加入到密码文件中&#xff0c;使他们可以使用sysdba或sysoper的权限来管理数据库 使用ORAPWD命令创建 语法如下: ORAPWD FILEfilename [ENTRIESnumusers] [FORCE{Y|N}] [IGNORECASE{Y|N}] …

ylb-项目简介

1、各模块服务功能 注&#xff1a;其部分实体类、接口、mapper文件由MyBatis逆向工程生成。 2、Maven管理&#xff08;多模块&#xff0c;继承和聚合&#xff09; 2.1 parent模块 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"…

DevOps系列文章之 Dockerfile 使用流程

制作项目应用镜像 主要步骤&#xff1a; Step1、准备项目应用程序包 Step2、编写Dockerfile及启动脚本 Step3、docker build 构建镜像 Step4、docker run 启动容器 Step5、docker exec 进入容器进行验证 Step6、镜像的导入导出 Step7、提交容器生成新镜像 Step1、准备项目应…

如何缩短 js 解析时间,如何优化首屏(延迟加载)

缩短js解析时间 代码优化 避免全局查找&#xff08;沿着作用域链找需要时间&#xff09;&#xff0c;避免闭包&#xff0c;用数据结构等 减小js的大小&#xff1a;压缩和混淆 压缩 剔除没用到的代码&#xff0c;把长表达式转换成同含义的短表达式等 语法转换和优化&#…

c++ 无锁队列的简单实现

无锁队列的基本介绍 一个关于无锁队列的多线程读写代码示例。在这里&#xff0c;我提供一个简单的示例来说明这个问题。 在使用无锁队列时&#xff0c;需要注意以下几点&#xff1a; 使用原子操作来实现对队列的读写操作&#xff0c;以避免多线程同时访问同一数据导致的竞争条…

在SPringBoot生成验证码

1.引入依赖,这个依赖中包含了生成验证码的工具类 <!--引入hutool --><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.3.9</version></dependency> 2.编写配置类 import cn.hu…

Linux字符设备操作函数

Linux字符设备操作函数是指对字符设备进行打开、关闭、读取、写入、控制等基本操作的函数&#xff0c;它们通过字符设备结构体中的 file_operations 结构体来定义。常用的字符设备操作函数包括&#xff1a; 1、open: 当一个进程试图打开设备文件时&#xff0c;调用这个函数。开…

华润燃气牵手腾讯云 数字技术助力燃气行业高质量发展

7月13日&#xff0c;华润燃气与腾讯云正式签署战略合作协议。双方将充分发挥各自优势&#xff0c;探索AI大模型在燃气行业的深度应用&#xff0c;并深耕分布式计算、连接和客户运营等领域&#xff0c;不断提升燃气民生服务的效率、质量&#xff0c;共同推动行业数字化转型和高质…