每一个tag在TLD中对应一个tag元素,下表是tag元素的子元素:

Tag元素的子元素

元素名称
描述

name
独一无二的元素名

tag-class
Tag标签对应的tag处理类

tei-class
javax.servlet.jsp.tagext.TagExtraInfo的子类,用于表达脚本变量(可选)

body-content
Tag标签body的类型

display-name
被可视化工具(诸如Jbuilder)用来显示的名称(可选)

small-icon
被可视化工具(诸如Jbuilder)用来显示的小图标(可选)

large-icon
被可视化工具(诸如Jbuilder)用来显示的大图标(可选)

description
此tag标签的描述

variable
提供脚本变量的信息(同tei-class)(可选)

attribute
Tag标签的属性名

以下章节介绍对于不同类型的tag,如何具体地实现它们。

简单的tag

tag处理类

简单的tag处理类必须实现Tag接口的doStartTag和doEndTag方法。当jsp引擎碰到tag标签的开头时,doStartTag被调用,因为简单的tag没有body,所以此方法将返回 SKIP_BODY。当jsp引擎碰到tag标签的结尾时,doEndTag被调用,如果余下的页面还要被计算,那它将返回EVAL_PAGE,否则将会返回SKIP_PAGE。

以下是例子:对于标签 <tt:simple /> ,它的tag处理类实现如下:

public SimpleTag extends TagSupport
{
public int doStartTag() throws JspException
{
try{
pageContext.getOut().print(“Hello.”);
}catch(Exception e){
throw new JspTagException(“SimpleTag: “ + e.getMessage());
}
return SKIP_BODY;
}
public int doEndTag()
{
return EVAL_PAGE;
}
}

注意:如果tag标签没有内容的话,那必须定义body-content元素为空,例如

<body-content>empty</body-content>

带属性的tag标签

tag处理类

对于tag标签的每个属性,你必须依照JavaBeans规范来定义其属性,以及get和set方法。以struts的logic:present 标签为例,

<logic:present parameter=”Clear”>

与此相应,此tag处理类应有如下方法和定义:

protected String parameter = null;
public String getParameter()
{
return this.parameter;
}
public void setParameter(String parameter)
{
this.parameter = parameter;
}


注意:如果你的属性名为id,而且你的tag处理类是从TagSupport类继承的,那你就不需要定义它的属性和set和get方法,因为他们早已在TagSupport被定义过了。

Attribute元素

对于tag标签的每个属性,你必须定义它是否必须的,它的值是否可以用诸如<%= …%>的表达式来获得,以及它的类型(可选),如果不指定它的类型,那就默认为是java.lang.String类型。如果rtexprvalue元素被定义为true或yes,那么在type元素中就定义了attribute的返回类型。

<attribute>
<name>attr1</name>
<required>true|false|yes|no</required>
<rtexprvalue>true|false|yes|no</rtexprvalue>
<type>attribute的返回类型(只用当rtexprvalue为真是才有效)</type>
</attribute>

如果tag的某个属性不是必须的,那tag处理类会自动提供一个缺省值。

Converted from CHM to HTML with chm2web Pro 2.7 (unicode)