Taglib 原理和实现:第四章 循环的Tag

对族实例进行任意的矩阵变换,需要什么样的族? 问:一个小问题,想向您请教一下。 能不能实现一个这样的操作:创建了一个常规模型的FamilyInstance,然后知道旋转和平移的矩阵,能否根据变换矩阵更新FamilyInstance的位置,绕任意轴旋转任意角度。 请问什么样的实体才能在revit项目文件中任意旋转?貌似一般的实例只能在XY平面内旋转,并且LocationPoint中只有一个Rotation参数。答:您好,因为Revit里面的构件 阅读详情

第四篇 支持循环的Tag

1。问题:在request里的 People 对象,有个属性叫 men ,men 是一个Collection ,有许多个man 。现在,把 collection里的man的名字都显示出来

 显然,这是一个嵌套Tag的问题。有三个Tag互相作用:最外层的Tag找到People对象,中间的Tag取得Collection,子Tag负责打印。
 例如:
 <diego:withObject value="${people}">
  <diego:withCollection property="men">
   <diego:elementout property="name"/>  
  </diego:withCollection>
 </diego:withObject>
 
 思路如下:
 1.编写WithObjectTag,负责从El表达式中取得对象
 2.编写WithCollectionTag,负责从对象中取得 Collection ,遍历 Collection ,每遍历一次 Collection ,执行一次body
 3.编写ElementoutTag ,把 Collection 中每个men对象的 name 打印出来
 
 
2. 完整程序如下:
 
在上例的diegoyun.vo包内,编写 People 类

package diegoyun.vo;
import java.util.Collection;
public class People
{
 private Collection men = null; 
 public Collection getMen()
 {
  return men;
 }
 public void setMen(Collection men)
 {
  this.men = men;
 }
}

编写 withObject ,这是从request里取得People对象的最外层Tag

package diegoyun;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
import org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager;
public class WithObjectTag extends BodyTagSupport
{
 private Object value = null;

 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
 {  
  return EVAL_PAGE;
 }
}

 

编写WithCollectionTag,该Tag负责取得Collection,并遍历执行子Tag
package diegoyun;

import java.util.Collection;
import java.util.Iterator;

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

import org.apache.commons.beanutils.PropertyUtils;

public class WithCollectionTag extends BodyTagSupport {
 private Object element = null;

 private Collection list = null;

 private Iterator iterator = null;

 public Object getElement() {
  return element;
 }

 public void setProperty(String property) throws JspException {
 //取得父Tag对象,并且得到Collection
  WithObjectTag parent = (WithObjectTag) getParent();
  if (parent == null)
   throw new JspException("parent tag is null");
  try {
   Object propertyValue = PropertyUtils.getProperty(parent.getValue(),
     property);
   this.list = (Collection) propertyValue;
   if (list == null)
    throw new JspException("Collection is null");
  } catch (Exception e) {
   throw new JspException(e);
  }
 }

 public int doStartTag() throws JspException {
 //设置第一个元素,然后执行子Tag
  iterator = list.iterator();
  if (iterator.hasNext())
   element = iterator.next();

  return EVAL_BODY_INCLUDE;
 }

 public int doAfterBody() {
  if (iterator.hasNext()) {
  //如果还存在子元素,设置子元素,并且再次执行子Tag
  //循环由此而来
  //否则不再执行子Tag
   element = iterator.next();
   return EVAL_BODY_AGAIN;
  }
  else
   return EVAL_PAGE;
 }
}

编写 ElementOutputTag

package diegoyun;
import java.io.IOException;

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

import org.apache.commons.beanutils.PropertyUtils;

public class ElementOutputTag extends TagSupport
{
 private Object propertyValue  = null;
 public void setProperty(String property)throws JspException
 {
  WithCollectionTag parent = (WithCollectionTag)getParent();
  if(parent == null)
   throw new JspException("parent tag is null");
  try
  {
  //判断上层tag中是否存在该属性名称,如果存在,取得属性值,否则报错
   propertyValue = PropertyUtils.getProperty(parent.getElement(), property);
  }
  catch (Exception e)
  {
   throw new JspException(e);
  }
 }
 public int doEndTag()throws JspException
 {
  try
  {
  //简单的把值打印到jsp页面
   pageContext.getOut().print(propertyValue);
  }
  catch (IOException e)
  {
   throw new JspException(e);
  }
  return EVAL_PAGE;
 }
}

编写tld
<!--WithObjectTag-->
 <tag>
  <name>withObject</name>
  <tag-class>diegoyun.WithObjectTag</tag-class>
  <body-content>JSP</body-content>
  <attribute>
   <name>value</name>
   <required>false</required>
   <rtexprvalue>true</rtexprvalue>
  </attribute>
 </tag>
 <!--WithCollectionTag-->
 <tag>
  <name>withCollection</name>
  <tag-class>diegoyun.WithCollectionTag</tag-class>
  <body-content>JSP</body-content>
  <attribute>
   <name>property</name>
   <required>false</required>
   <rtexprvalue>true</rtexprvalue>
  </attribute>
 </tag>
 <!--ElementOutputTag-->
 <tag>
  <name>elementout</name>
  <tag-class>diegoyun.ElementOutputTag</tag-class>
  <body-content>empty</body-content>
  <attribute>
   <name>property</name>
   <required>false</required>
   <rtexprvalue>true</rtexprvalue>
  </attribute>
 </tag>
 
编写jsp
<%@ page language="java" %>
<%@ page import="diegoyun.vo.*"%>
<%@ page import="java.util.*"%>
<%@ taglib uri="/WEB-INF/tlds/diego.tld" prefix="diego"%>

<html>
<body bgcolor="#FFFFFF">
<%
Collection c = new ArrayList();

Man man1 = new Man();
man1.setName("diego");
c.add(man1);

Man man2 = new Man();
man2.setName("Zidane");
c.add(man2);

Man man3 = new Man();
man3.setName("Rui");
c.add(man3);

People p =new People();
p.setMen(c);
request.setAttribute("people",p);
%>
Test loop tag:
<br>
<diego:withObject value="${people}">
 <diego:withCollection property="men">
  <diego:elementout property="name"/>
 <br>
 </diego:withCollection>
</diego:withObject>
</body>
</html>

运行,则可以看到:
Test loop tag:
diego
Zidane
Rui

全志 camera: 4路AHD摄像头转MIPI TP2815 驱动模块主要实现将 4 路的 AHD/TVI/CVBS Camera 的数据转换为 MIPI 数据,从而实现在 T527 端来对数据进行处理和送显。 阅读详情

相关推荐

2025海外代理IP深度横评:Bright Data、IPFoxy、SmartProxy等六大服务商实战对比

本文深度横评2025年六大海外代理IP服务商(Bright Data、IPFoxy、SmartProxy、IPIPGO、Kookeey及青果网络),基于实战测试数据,从IP池质量、速度稳定性、性价比等维度进行对比。针对跨境电商、数据爬虫、社交媒体管理等不同业务场景,提供精准的选购指南与避坑建议,帮助企业用户根据自身需求选择最合适的代理IP解决方案。

weixin_29196891的博客 434

taglib遍历foreach循环list集合

第一部导入jstl.jar 第二步进行list传输: package com.aaa.servlet; import com.aaa.dao.IUserDAO; import com.aaa.dao.impl.UserDAOImpl; import javax.servlet.ServletException; import javax.servlet.anno...

weixin_30900589的博客 295

用LTspice仿真Buck电路输出电容:从参数计算到波形优化的全流程演示

本文详细介绍了使用LTspice仿真Buck电路输出电容的全流程,从理论计算到波形优化。通过解析关键参数如纹波电压、瞬态响应和ESR,结合工程计算方法和LTspice仿真技巧,帮助工程师优化Buck电路设计,解决输出纹波过大和瞬态响应不佳的问题。

night的博客 851

JSTL中c:forEach循环控制标签的用法

      &lt;c:forEach&gt;循环标签可以根据循环条件(通常和el表达式使用,el表达式我们有机会再说,在这里我就默认你会基本的el表达式了),遍历集合并从中取出我们想要的数据。如果在JSP页面中使用JAVA代码来遍历数据,会使页面非常混乱,不利于维护和分析。使用&lt;c:forEach&gt;循环标签可以是页面更加直观、简洁。      &lt;c:forEach&gt;有以下...

lxh123456789asd的博客 9万+

scGPT实战指南:如何用生成式AI加速你的单细胞多组学研究?

本文提供了scGPT在单细胞多组学研究中的实战指南。详细介绍了从环境部署、数据预处理到细胞类型注释与扰动预测等核心任务的操作流程。通过利用生成式AI和Transformer基础模型,scGPT能够显著加速分析,并提升细胞注释的准确性及基因调控网络推断的深度,为研究人员提供了强大的AI分析引擎。

weixin_29215815的博客 402

Hypermesh二次开发实战:从Tcl/Tk脚本到Ext API的进阶之路

本文系统介绍了Hypermesh二次开发的进阶路径,从自动化重复操作的Tcl/Tk脚本入门,到利用HMASCII接口深度读写模型数据,最终深入Ext API进行高性能计算与功能定制。通过实战案例,帮助工程师掌握从脚本录制到C++插件开发的完整技能,显著提升CAE前处理效率与自动化水平。

weixin_29306875的博客 671

第四章 循环的Tag

作者: 点击: 4 日期:2004-11-13 03:23:31 1。问题:在request里的 People 对象,有个属性叫 men ,men 是一个Collection ,有许多个man 。现在,把 collection里的man的名字都显示出来 显然,这是一个嵌套Tag的问题。有三个Tag互相作用:最外层的Tag找到People对象,中间的Tag

二七老泉 833

【3D无序抓取】--终极技术详解

3D无序抓取技术详解:从感知到执行的全流程技术方案 本文系统梳理了3D无序抓取(Bin Picking)的核心技术栈,涵盖3D感知、抓取规划和机器人执行三大环节。在3D感知层,详细介绍了点云采集与预处理方法(PCL/Open3D)、物体分割(PointNet++)和位姿估计(PVN3D/DenseFusion)等关键技术。抓取规划部分重点解析了抓取生成(GraspNet)、质量评估(Dex-Net)和动态避障(MoveIt!)算法。机器人执行环节则涉及路径规划、力控技术和末端执行器选型。同时提供了完整的工具

weixin_45590420的博客 597

JSP中使用<c:forEach>标签循环遍历元素

1、forEach标签元素 2、使用forEach标签时需要在JSP页面中引入JSTL标签库,如下: 3、forEach标签使用实例 1)UserService.java中的getallUser()方法查询用户信息 public List getallUser(){ conn=dao.getConnection(); List list=new

态度决定思路,思路决定出路!!! 5万+

关于Fluent模拟中的动态接触角UDF实现,详细设计

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 1147

maya导入导出bvh 自动 脚本

maya打开bvh脚本

jacke121的专栏 1550

taglib 原理和实现

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

oathevil的专栏 1272

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

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

java标签--taglib 原理和实现

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

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

假人有限元模型

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

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Taglib原理和实现之循环的Tag

1、问题:在request里的 People 对象,有个属性叫 men ,men 是一个Collection ,有许多个man 。现在,把 collection里的man的名字都显示出来。   显然,这是一个嵌套Tag的问题。有三个Tag互相作用:最外层的Tag找到People对象,中间的Tag取得Collection,子Tag负责打印。   例如: <diego:withObj...

igogogo9的专栏 156

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

taglib 原理和实现[转载]

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

在水一方 1207

第三章 tag

Tag文件的扩展名为.tag,其结构和JSP文件类似,可以使用HTML标签,Java脚本,JSP动作和指令,以及一些特殊的指令。- 编写一个名为Area.tag的Tag文件,并保存在`/WEB-INF/tags/math/`目录下。其中,prefixOfTag是taglib指令中定义的前缀,tagName是自定义标签的名称,attribute是自定义标签的属性,标记体是自定义标签的内容。- ` 标记体 `:有标记体的Tag标记,用于调用需要传递参数或内容的Tag文件。

red_q的博客 337

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

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

qq_33396462的博客 6812

一篇文章读懂框架标签(taglib)的工作原理

在Java Web应用开发时,如果不是前后端分离进行数据交互的实现,一般都会通过JSP、FreeMarker、Velocity之类的技术进行页面的渲染。而在页面的渲染过程中,很多时候会使...

Tomcat那些事儿 181

第一章:taglib 原理和实现

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

happyzwh的专栏 725

tagLib备忘 (转载)

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

crv14030的博客 129

自定义taglib的开发

自定义标签必须实现下面三个接口中的一个:Tag、IterationTag、BodyTag 1.Tag 如果要实现这个接口,可以通过扩展TagSupport这个类,来写自己需要的方法,而不需要把Tag接口中的所有方法实现。 Tag接口的方法:doStartTag()、doEndTag()、getParent()、setParent()、release()、setPageContext...

148
上一篇: Taglib 原理和实现:第三章 tag之间的嵌套和属性读取
下一篇: Taglib原理和实现 第五章:再论支持El表达式和jstl标签
云哥
博客等级 码龄22年 2粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值