Taglib 原理和实现:第三章 tag之间的嵌套和属性读取

安卓手机TagMo.2.1写入任天堂amiibo数据 自制amiibo的android工具自制amiibo的android工具自制amiibo的android工具自制amiibo的android工具自制amiibo的android工具自制amiibo的android工具自制amiibo的android工具自制amiibo的android工具自制amiibo的android工具自制amiibo的android工具自制amiibo的android工具自制amiibo的android工具自制amiibo的android工具自制amiibo的android工具自制amiibo的android工具自制amiibo的android工具自制amiibo的android工具 立即下载

第三篇 tag之间的嵌套和属性读取

1。问题:在request里有一个 Man 对象,它有两个属性:name和age。现在,我们想用一个嵌套的tag,父tag取得对象,子tag取得name属性并显示在页面上。例如,它的形式如下:
 <diego:with object="${Man}">
  <diego:output property="name"/>
 </diego:with>
 object 支持el表达式,表示取得 Man 对象。output的property表示从该对象取得名为name的属性。
 
2。如何支持tag之间的嵌套
 在子tag里调用getParent 方法,可以得到父tag对象。用 findAncestorWithClass 方法,则可以通过递归找到想要找的tag。例如
 <diego:with object="${people}">   <!--表示取得一个对象-->
  <diego:withCollection property="men"> <!--表示取得对象里的一个属性,这个属性是个                  Collection,Collection里添加了许多man,每个man有名字和年龄-->
   <diego:output property="name"/>  <!--取得name属性并显示-->
  </diego:withCollection>
 </diego:with>
 对于最内层的outputTag来说,调用getParent,可以得到 withCollectionTag,
 通过如findAncestorWithClass(this,WithTag.class)的方式,可以得到withTag
 得到Tag之后,就可以取得Tag的属性,进行业务逻辑处理,然后输出到jsp
 
3。如何支持类属性查找功能
 显然,在上面的outputTag中,我们要根据属性的名字,查找类中有没有这个属性。然后取出属性的值并显示。通常,这可以编写自己的反射函数来完成。更简单的办法,是通过 BeanUtil 的PropertyUtils方法来完成功能。BeanUtil 是apache上的一个开源项目。
 示例如下:
 import org.apache.commons.beanutils.PropertyUtils;
 。。。。。。
 property = PropertyUtils.getProperty(currentClass, propertyName);
 propertyName是待查找属性的名字,例如上面的"name",currentClass是待查找的类,例如上面的People
 记得把 commons-beanutils.jar添加到WEB-INF/lib目录下
 
4。现在让我们实现开篇提出的问题,编写WithTag如下:

package diegoyun;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;

import org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager;

/**
 * @author chenys
 */
public class WithTag extends BodyTagSupport
{
 private Object value = null;
 private Object output = null;

 public void setOutput(Object output)
 {
  this.output = output;
 }
 public Object getValue()
 {
  return value;
 }
 public void setValue(Object value)throws JspException
 {
  this.value = ExpressionEvaluatorManager.evaluate(
            "value", value.toString(), Object.class, this, pageContext);
 }
 public int doStartTag()
 {
  return EVAL_BODY_INCLUDE;
 }
 public int doEndTag()throws JspException
 {
  try
  {   
   pageContext.getOut().print(output);
  }
  catch (IOException e)
  {
   throw new JspException(e);
  }
  return EVAL_PAGE;
 }
}

编写 NestedOutputTag 如下:

package diegoyun;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;

import org.apache.commons.beanutils.PropertyUtils;

/**
 * @author chenys
 */
public class NestedOutputTag extends BodyTagSupport
{
 private String property = null;
 
 public void setProperty(String property)
 {
  this.property = property;
 }
 
 public int doEndTag()throws JspException
 {  
  WithTag parent =(WithTag)getParent();  
  if(parent==null) 
   throw new JspException("Can not find parent Tag ");
  try
  { 
   Object propertyValue = PropertyUtils.getProperty(parent.getValue(), property);
   parent.setOutput(propertyValue);
  }
  catch (Exception e)
  {
   throw new JspException(e);
  }
  return EVAL_PAGE;
 }
}

在包diegoyun下添加一个包vo,在vo下写一个Man类:

package diegoyun.vo;

/**
 * @author chenys
 */
public class Man
{
 private String name = null;
 private int age = 0;
 
 public int getAge()
 {
  return age;
 }
 public void setAge(int age)
 {
  this.age = age;
 }
 public String getName()
 {
  return name;
 }
 public void setName(String name)
 {
  this.name = name;
 }
}


写tld

<!--WithTag-->
 <tag>
  <name>with</name>
  <tag-class>diegoyun.WithTag</tag-class>
  <body-content>JSP</body-content>
  <attribute>
   <name>value</name>
   <required>false</required>
   <rtexprvalue>true</rtexprvalue>
  </attribute>
 </tag>
 <!--OutputTag3-->
 <tag>
  <name>nestedout</name>
  <tag-class>diegoyun.NestedOutputTag</tag-class>
  <body-content>empty</body-content>
  <attribute>
   <name>property</name>
   <required>false</required>
   <rtexprvalue>false</rtexprvalue>
  </attribute>
 </tag>
 
写jsp页面
<%@ page language="java" %>
<%@ page import="diegoyun.vo.*"%>
<%@ taglib uri="/WEB-INF/tlds/diego.tld" prefix="diego"%>

<html>
<body bgcolor="#FFFFFF">
<%
Man man = new Man();
man.setName("diego");

request.setAttribute("man",man);
%>
Test nested tag:
<br>
<diego:with value="${man}">
 <diego:nestedout property="name"/>
</diego:with>
</body>
</html>

运行页面,则可以看到:
Test nested tag:
diego

5。结束语:
 上述例子简单描绘了嵌套的Tag之间如何交互。通常子Tag负责取得数据,然后设置父Tag的属性,最后在父Tag里显示到jsp页面。如上面的例子,父 Tag 的 output 表示待打印的对象,通过 nestedoutTag 取得name的值,设置output,然后打印出来。 
 通过支持El表达式和动态属性联结,Tag可以实现强大的处理功能。将逻辑都集中到Tag里,极大的简化页面的编写。
 

tagmoNFC数据写入软件 下载后安装tagmo.apk安装后load key_retail.bin 文件之后即可使用 立即下载

相关推荐

Java分页处理(使用pager-taglib详细讲解两种分页的实现)

Pager-taglib实际上是一个Jsp标签库,为在JSP上显示分页信息而设计的一套标签,通过这些标签的不同的组合支持多种风格的分页显示。会形成多种不一样的分页页面,风格各异,她自带的DEMO就有七种左右的分页风格,包括Google的分页风格。而需要订制自已的风格的分页页 面也非常简单。 分页方式有两种: 第一种是页面分页,适合查询结果不大情况 第二种是数据库分页,适合大量查询 提高部分——分页的通用性设计

第三章 tag之间的嵌套和属性读取

作者: 点击: 4 日期:2004-11-13 03:23:31 1。问题:在request里有一个 Man 对象,它有两个属性:name和age。现在,我们想用一个嵌套的tag,父tag取得对象,子tag取得name属性并显示在页面上。例如,它的形式如下:     object 支持el表达式,表示取得 Man 对象。output的property表示

二七老泉 1133

Jetson Orin Nano Super开发板实战:视觉模型部署与性能优化指南

本文详细介绍了Jetson Orin Nano Super开发板在边缘AI视觉模型部署与性能优化的完整实战指南。内容涵盖JetPack 6.1环境配置、Docker容器化部署、YOLO11及Transformer模型的TensorRT优化技巧,并通过实测数据展示了性能提升与功耗管理策略,为开发者提供高效的视觉AI部署解决方案。

7h6j5k4l3的博客 1196

EL函数以及自定义标签的应用

一、EL函数(调用普通类的静态方法) 编写步骤(自定义EL函数的编写步骤即自定义标签的编写步骤): ①编写一个普通的java类,提供一个静态方法,功能自定,例如下: 1 package cn.wzbrilliant.el; 2 3 public class ElFunction { 4 public static String toUpperCase(Strin...

weixin_33889665的博客 226

comfyui从入门到精通二:提示词规则详解

《AI绘画提示词使用全指南》摘要: 本文系统解析AI绘画提示词的核心规则与实用技巧。关键点包括:1) 空格与下划线的本质差异,webui会自动转换但comfyui保留原格式;2) 数字与单词表达(如1girl/one girl)会导致风格变化;3) 三种权重控制方式(数值标注、括号嵌套、位置效应),其中数值标注最直观有效;4) 位置衰减公式揭示提示词排序对效果的影响权重。同时指出当前AI绘画仍存在角色一致性等更复杂的技术瓶颈。全文通过多组对比实验,为创作者提供从基础语法到高阶控制的完整解决方案。

ScottePerk的博客 1934

成功解决 OllamaError: status code 400, message: model ‘llama3.2:latest‘ not found 报错

本文针对Ollama更新后出现的OllamaError: status code 400, message: model 'llama3.2:latest' not found报错,分析了其根本原因——2026年1月Ollama将Llama 3.2模型命名从llama3.2:latest改为meta-llama/Llama-3.2:7b-instruct等新格式。解决方案包括:1)使用新模型名称;2)升级Ollama SDK;3)查询确认本地可用模型;4)批量更新旧项目脚本。通过正确适配新命名规则,

博客 1398

jsp自定义标签-----嵌套标签

开发类似sun公司提供的 标签  实现步骤:  第一步:编写一个父标签处理器Choose.java  public class Choose extends SimpleTagSupport {  //标记执行那个标签  private boolean isDo;  public boolean isDo() {  return isDo;  }  pub

pan-zy的专栏 2557

Python爬虫实战:逆向工程与异步爬虫技术,高效抓取国家知识产权局专利数据

相比于传统的Selenium,Playwright由微软开发,支持多浏览器(Chromium, Firefox, WebKit),API更现代,执行速度更快,并且能轻松录制用户操作生成代码。通常,列表中的摘要信息是缩略的,我们需要进入每个专利的详情页获取完整信息(如主权要求、法律状态等)。我们的第一步是手动操作一遍搜索流程,并用Playwright的“录制”功能或开发者工具,找出真正返回专利数据的那一个或多个网络请求。以友好的、对人类行为模拟的方式爬取数据是基本的网络礼仪,也能有效避免你的IP被封锁。

2201_76125261的博客 2419

JSP嵌套子标签

在实际开发中,往往需要多个标签的嵌套以完成一个任务,这样标签就存在父子关系。类似于下面: &lt;mt:if value="false"&gt;      &lt;mt:out value="&lt;%=outValue%&gt;"&gt;           这些内容会显示在客户端。      &lt;/mt:out&gt; &lt;/mt:if&gt; 在上面的标签中,&

帅得掉渣与傲得掉渣 422

把事务数据变成可分析数据:用 ABAP CDS 构建 Cube View 与 Query View,并拆解 OData 取数的底层路径

ABAP CDS分析建模:Cube与Query视图的实践解析 本文探讨了ABAP CDS分析建模中Cube View与Query View的核心区别与应用场景: 架构定位 Cube View作为分析型数据源,定义维度和度量的基础语义 Query View作为消费投影,控制查询可见字段和聚合逻辑 关键实现 通过@Analytics.dataCategory: #CUBE声明分析数据源 使用@DefaultAggregation确保指标口径一致性 @Analytics.query: true启用分析引擎特性 运

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 141

成功解决raise Py4JError py4j.protocol.Py4JError: py4j.protocol.Py4JError: Could not find py4j jar at 

成功解决raise Py4JError("Could not find py4j jar at {0}".format(jarpath)) py4j.protocol.Py4JError: Could not find py4j jar at 目录 解决问题 解决思路 解决方法 1、第一步安装jdk 2、第二步安装或升级py4j 解决问题 raise Py4JError("Could not find py4j jar at {0...

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 4627

第三章:Taglib 原理和实现:tag之间的嵌套和属性读取

第三篇 tag之间的嵌套和属性读取1。问题:在request里有一个 Man 对象,它有两个属性:name和age。现在,我们想用一个嵌套的tag,父tag取得对象,子tag取得name属性并显示在页面上。例如,它的形式如下:     object 支持el表达式,表示取得 Man 对象。output的property表示从该对象取得名为name的属性。 2。如何支持tag之间的嵌套 在子ta

blade_sea的专栏 849

用python画年度和月度的日历图

用python画各种日历图,可以区分月份来画也可以画一整年的,日历图中可以体现自己的信息

weixin_44853840的博客 2138

Taglib 原理和实现之什么是Taglib

关键字: tag标签 1、问题:Tag究竟是什么?如何实现一个Tag?   一个tag就是一个普通的java类,它唯一特别之处是它必须继承TagSupport或者BodyTagSupport类。这两个类提供了一些方法,负责jsp页面和你编写的类之间的交互,例如输入,输出。而这两个类是由jsp容器提供的,无须开发人员自己实现。换句话说,你只需把实现了业务逻辑的类继承TagSupport或者BodyTagSupport,再做一些特别的工作,你的类就是一个Tag。并且它自己负责和jsp页面的交互,不用

JACK的专栏 575

YOLOv13改进策略【损失函数篇】| 2024 引进Focaler-IoU损失函数 加强边界框回归 (Focaler-DIoU、Focaler-GIoU、Focaler-CIoU)

本文记录的是改进YOLOv13的损失函数,将其替换成。现有研究通过利用边界框之间的几何关系来提高回归性能,但忽略了困难样本和简单样本分布对边界框回归的影响。不同检测任务中困难样本和简单样本的分布不同,对于简单样本占主导的检测任务,关注简单样本的边界框回归有助于提高检测性能;对于困难样本比例较高的检测任务,需要关注困难样本的边界框回归。,提高检测器在不同检测任务中的性能。实现的。

Limiiiing的博客 870

Camera2Demo

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

java标签--taglib 原理和实现

第一章:taglib 原理和实现1。问题:Tag究竟是什么?如何实现一个Tag?    一个tag就是一个普通的java类,它唯一特别之处是它必须继承TagSupport或者BodyTagSupport类。这两个类提供了一些方法,负 责jsp页面和你编写的类之间的交互,例如输入,输出。而这两个类是由jsp容器提供的,无须开发人员自己实现。换句话说,你只需把实现了业务逻辑的类继 承TagSuppor

ヤ哖少輕狂ご--Roger's ZOME 4450

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

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

Taglib原理和实现

1、问题:Tag究竟是什么?如何实现一个Tag?   一个tag就是一个普通的java类,它唯一特别之处是它必须继承TagSupport或者BodyTagSupport类。这两个类提供了一些方法,负责jsp页面和你编写的类之间的交互,例如输入,输出。而这两个类是由jsp容器提供的,无须开发人员自己实现。换句话说,你只需把实现了业务逻辑的类继承TagSupport或者BodyTagSupport,再

Free 659

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

taglib 原理和实现

第一章:taglib 原理和实现 1。问题:Tag究竟是什么? 如何实现一个Tag?    一个tag就是一个普通的java类,它唯一特别之处是它必须继承TagSupport或者BodyTagSupport类。这两个类提供了一些方法,负 责jsp页面和你编写的类之间的交互,例如输入,输出。而这两个类是由jsp容器提供的,无须开发人员自己实现。换句话说,你只需把实现了业务逻辑的类继 承TagSu...

mz_hj的博客 169

js中自定义标签(TagLib)原理与实现

第一章:taglib 原理和实现 1。问题:Tag究竟是什么?如何实现一个Tag?   一个tag就是一个普通的java类,它唯一特别之处是它必须继承TagSupport或者BodyTagSupport类。这两个类提供了一些方法,负责jsp页面和你编写的类之间的交互,例如输入,输出。而这两个类是由jsp容器提供的,无须开发人员自己实现。换句话说,你只需把实现了业务逻辑的类继承TagSupport或

qq_33396462的博客 6812

tagLib备忘 (转载)

第一章:taglib 原理和实现 1。问题:Tag究竟是什么?如何实现一个Tag?一个tag就是一个普通的java类,它唯一特别之处是它必须继承TagSupport或者BodyTagSupport类。这两...

crv14030的博客 129

weblogic在处理jsp tag的scope属性时的BUG???

本人在项目中使用taglib,本来在tomcat下,很正常,迁移到weblogic时,大部分也正常,但有一个结构出现问题,即在TAG嵌套时,无法正常读取范围内的变量,请看以下结构体: <testj:class id="100"> <%=testInfo.getTitle()%> <testj:class id="200">...

weixin_34379433的博客 106
上一篇: Taglib 原理和实现:第二章 让Tag支持El表达式
下一篇: Taglib 原理和实现:第四章 循环的Tag
云哥
博客等级 码龄22年 2粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值