带标签体的标签,就是允许在标签内嵌套标签,通常可用于完成一些逻辑运算例如判断和循环等。
带标签体的标签需要继承 BodyTagSupport,该类包含一个 bodyContent 属性,该属性代表标签体。
BodyTagSupport还包含两个方法。
doAfterBodyO: 每次处理完标签体后调用该方法。
void doInitBodyO: 开始调用标签体时调用该方法。
如果有必要,可以重写这两个方法。
下面以一个迭代器标签为示例,介绍如何开发一个带标签体的标签,该标签体包含两个属性: bean 和 item, bean 属性代表 page 范围内的一个List; 而 item代表List 中的每个元素。标签的源代码如下:
public classMyiteratorTagextends BodyTagSupport//标签需要送代的集合对象名private String bean;//集合对象的元素private String item;//集合的当前索引private int i = 0;privateint size;prl飞rate Li st<String> itemList;Ilbea口属性的 setter方法public void setBean (String s)bean = s;Ilbean属性的 getter方法public StringgetBea口()return bean;Ilitem属性的 setter方法pUblic void setltem (String s)itern=s;Ilitem属性的 getter方法publicStringgetItem (){return item;//开始处理标签时,调用该方法。public int doStartTag() throws JspTagException1/从 page范围中获取List 对象itemLiat=(List<String?pageContext.getAttribute(bean);//获取List 的长度size = itemList.size();//将集合当前索引的值放在page范围的itern变量中pageContext.setAttribute(item,itemList.get(i);//返回值为EVAL_BODY_BUFFERED.表明需要计算标签体return EVAL_BODY_BUFFERED;//每次标签体处理完后调用该方法public int doAfterBody() throws JspException//移动 List 对象的索引位置i++;1/如果索引己经超过了集合的长度if (i >= size)1/将索引回零i =0;1/不再计算标签体,直接调用doEndTag方法return SKIP_BODY;//将集合的当前元素值放入page 范围的 item属性中pageContext.setAttribute(item , itemList.get(i?);//循环计算标签体return EVAL_BODY_AGAIN;1/标签体结束时调用该方法public int doEndTag() throws JspTagExceptiontry{//输出标签体内容bodyContent.writeOut(pageContext.getOut(?);}catch (IOException ex){throw new JspTagException( "错误");return EVAL_PAGE;
下面是一个嵌套在该标签内的带属性的标签,该标签的功能非常简单,仅仅从page范围中获取属性,然后在页面上输出该属性值。其代码如下: public class WritorTag extends TagSupport(Ilitem属性,该标签从page 中查找 item的属性,并输出属性值private String item;Ilitem的 setter方法public void setltern (String s){item=s;Ilitern的 getter方法public Stringgetitern()return itern;//开始处理标签时的调用该方法public int doStartTag() throwsJspTagExceptiontry{//从 page 范围内搜索 item 的属性,pageContext.getOut() .write((String)pageContext.getAttribute(item));catch (IOException ex)throw new JspTagException("错误//) ;//返回 EVAL_PAGE. 继续计算页面输出。return EVAL_PAGE;
在处理标签类的各个方法中,不同的返回值对应不同的含义,常用的返回值有如下几个。
SKIP_BODY: 不处理标签体,直接调用 doEndTagO方法。
SKIP_PAGE: 忽略标签后面的 JSP 页面。
EVAL_PAGE: 处理标签结束,直接处理页面内容。
EVAL_BODY_BUFFERED: 处理标签体。
EVAL_BODY_INCLUDE: 处理标签体,但忽略 setBodyContentO和 doInitBodyO方法。
EVAL_BODY_AGAIN: 对标签体循环处理。
将上面两个标签配置在标签库中,标签库的配置片段如下:
<!--配置法代器标签…〉<tag><!--配置标签名-><narne>iterator</narne><!--配置标签的实现类→〉<tag-class>rnytag.MylteratorTag</tag-class><!…配置标签的标签体内容--><body-content>JSP</body-content><!--配置 bean属性><attribute><narne>bean</narne><required>true</required><rtexprvalue>true</rtexprvalue></attribute><!--配置item属性一〉<attribute><narne>itern</narne><required>true</required><rtexprvalue>true</rtexprvalue></attribute></tag><!--配置输出标签-→<tag><!…配置标签名一〉<name>write</name><1--配置标签的实现类一〉<tag-class>mytag.WritorTag</tag-class><!-- 配置标签的标签体内容:只能是空标签--><body-content>empty</body-content><!--配置标签属性item--><attribute><name>item</name><required>true</required><rtexprvalue>true</rtexprvalue></attribute></tag>
在 JSP 中嵌套使用两个标签的代码如下:
〈%//创建 List 对象List<String> a = new ArrayList<String>();a.add( "hello");a.add("world");a .add("java" );//将 List 放入 page 范围的属性 apageContext.setAttribute("a", a);%〉<!--元素放在表格中-><table border="l" bgcolor="dddd99"><!-- 使用迭代器标签,对List对象 a 进行迭代-><mytag:iteratorbea口::::lla"item:::: "item"><tr><td><!--输出 item属性的值二〉<mytag:write item="item"l><ltd></tr></mytag:iterator></table>
页面的执行效果如图2.30 所示。
[img]http://new.51cto.com/files/uploadimg/20080825/115640952.jpg
[/img]图 2.30 迭代器标签
注意:本示例的迭代器仅对 page 范围的 List 进行迭代,用法有所局限。读者可以将其扩展,增加一个属性,指定迭代搜索的范围,并可将迭代的目标不局限于List,而是Collection,甚至包括数组。大部分的框架如 Struts、 WebWork都包含了自己的迭代器标签。
分享到:
相关推荐
### jsp自定义带标签体的标签:深入解析与实践 在Java Server Pages(JSP)技术中,自定义标签是提升代码复用性和可维护性的重要手段之一。特别是带标签体的标签,它们允许在标签内部嵌入动态内容,为开发者提供了...
"带属性不带标签体的标签实例"是关于如何创建和使用这种类型的自定义标签的实践案例。 首先,一个带属性的自定义标签必须有一个对应的Java类来实现其逻辑。这个类通常会扩展`javax.servlet.jsp.tagext.TagSupport`...
而"带标签的TextView",如标题所示,是在普通`TextView`的基础上进行了一定的扩展,通常是为了提供更丰富的用户界面元素,使用户可以更快地理解文本内容的含义。这种设计在各种应用程序中很常见,例如表单、设置页面...
这是一个带有标签体的自定义标签 ``` 4. **部署和使用**:将TLD文件放置在Web应用的`WEB-INF`目录下的`taglib`目录中,然后在JSP页面中通过`<%@ taglib %>`指令引入标签库,并使用自定义标签。例如: ```jsp...
超链接A字体大小设置 A标签字体大小 整体布局。灵感与pmins
- **说明**:`<bgsound>` 标签允许页面带有背景声音或创建音轨,但该标签已经被废弃。例如: ```html ``` ##### 标签:big - **说明**:`<big>` 标签用于指定内含文本要以比当前字体稍大的字体显示,但该标签...
斑马Zebra、霍尼韦尔Honeywell(原Intermec)标签打印机在处理中文打印任务时,需要特别注意字体配置。这些品牌是业界知名的工业级条码和标签打印解决方案提供商,广泛应用于物流、仓储、零售等领域。本文将详细阐述...
在进行网络工程中,制作和贴附网线标签是一项至关重要的任务,因为它有助于清晰地识别和管理复杂的网络布线系统。网线标签通常用于区分不同的网线,标识它们连接的设备,以及提供必要的端口信息,以便于后期的维护和...
1. 用户界面:一个或多个带有自定义事件处理程序的Label控件,用于响应鼠标进入(MouseEnter)和离开(MouseLeave)事件。 2. 事件处理程序:在MouseEnter事件中,修改标签的Font(可能包括颜色、大小变化)并添加...
三、自结束标签(不带标签体,TagSupport) 3.1 自结束标签简介 自结束标签没有标签体,只包含属性,例如`<myTag attr1="value1" attr2="value2"/>`。它们常用于设置简单的配置信息。 3.2 自结束标签开发示例 开发自...
点阵字体在IT行业中是一种特殊的字体格式,常用于打印机,特别是标签打印机中。"ts24.lib" 是一个与点阵字体相关的库文件,可能是针对特定型号的标签打印机设计的。这种字体库通常包含了预定义的字符集,每个字符由...
这种程序通常会有一个接口接收图片、文字、颜色和位置参数,然后返回带有标签的新图片以及标签的几何信息。开发者可以基于这个示例进行修改,适应自己的项目需求,比如改变标签的样式、动态生成标签或者与数据库集成...
Android 标签控件,也称为`TagView`,通常表现为一组可选的、带有文字的小方块,用户可以通过点击这些标签进行交互。它们在UI设计中扮演着重要的角色,为用户提供简洁、直观的界面。在描述中提到的链接可能是一个...
在MATLAB编程环境中,开发一个带列或列标签的`DispTableDisplayMatrix`功能是一项实用的任务,这使得数据可视化和解释更加直观。`DispTableDisplayMatrix`通常用于处理和展示结构化数据,如数据框(data frames)...
这个"带标签页的菜单demo"是一个示例项目,旨在展示如何在静态网页上集成这种功能,同时可能考虑了多设备和浏览器的兼容性问题。 首先,菜单通常位于网页的顶部或侧边,它提供了网站的主要导航链接,帮助用户轻松...
在IT领域,尤其是在编程和软件开发中,"易语言标签透明"是一个具体的技术概念,主要涉及到用户界面(UI)设计和编程。易语言是一种简洁、直观的中文编程语言,其目标是让编程变得简单易懂,使更多的人能够参与到编程...
条码标签打印软件v9.0是一款专为办公室环境设计的高效工具,旨在帮助用户轻松创建、设计并打印各种类型的条形码标签。这款软件集成了丰富的功能,以满足不同行业的标签制作需求,如零售、物流、仓储、制造等。在这款...
在易语言中,"标签上下滚动"是一个常见的用户界面(UI)效果,常用于显示大量文本信息时,避免因信息过多而无法完全展示。 "标签"在软件开发中通常指的是一个可以显示固定或动态文本的控件,如Windows操作系统中的...