Tag处理类的方法
Tag标签类型
所调用的方法
基本标签
doStartTag, doEndTag, release
带属性的标签
doStartTag, doEndTag, set/getAttribute1...N, release
带内容的标签
doStartTag, doEndTag, release
带内容的标签,且
内容重复循环
doStartTag, doAfterBody, doEndTag, release
带内容的标签,且内容与JSP交互
doStartTag, doEndTag, release, doInitBody, doAfterBody, release
一个tag处理类可以通过javax.servlet.jsp.PageContext来与JSP交互,通过javax.servlet.jsp.PageContext类,tag处理类可以访问JSP中的request、session和application对像。
如果tag标签是互相嵌套的,那内层的tag处理类可以通过它的parent属性来访问上层的tag处理类。
一般情况都将所有的tag处理类打成了JAR的包,以便于发布。
Tag库描述(简称TLD)
Tag库是用xml语言描述的,TLD包括了tag库中所有tag标签的描述,它一般用来被jsp服务器用来校验tag的语法正确性,或者被jsp开发者用来开发新的标签。
TLD的文件扩展名必须为.tld,而且必须放在当前WEB应用的WEB-INF目录或其子目录中。
一个TLD的内容的开头必须遵守标准的XML开头,用于描述DTD和xml的版本,例如:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
TLD必须以<taglib>来作为它的根元素,<taglib>的子元素如下表:
<taglib>的子元素
Element
Description
tlib-version
Tag库的版本
jsp-version
Tag库所需要的jsp的版本
short-name
助记符,tag的一个别名(可选)
uri
用于确定一个唯一的tag库
display-name
被可视化工具(诸如Jbuilder)用来显示的名称(可选)
small-icon
被可视化工具(诸如Jbuilder)用来显示的小图标(可选)
large-icon
被可视化工具(诸如Jbuilder)用来显示的大图标(可选)
description
对tag库的描述(可选)
listener
参见下面listener元素
tag
参见下面tag 元素
Listener元素
一个tag库可能定义一些类做为它的事件侦听类,这些类在TLD中被称为listener 元素,jsp服务器将会实例化这些侦听类,并且注册它们。Listener元素中有一个叫listener-class的子元素,这个元素的值必须是该侦听类的完整类名。
Tag元素
每个tag元素在tag库中都要指出它的名字、类名、脚本变量、tag的属性。其中脚本变量的值可以直接在TLD中定义或通过tag附加信息的类来取得。每个属性描述了这个属性是否可以省略,它的值是否可以通过<%= …%>这样的JSP语法来获得,以及属性的类型。
每一个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标签的每个属性,你必须定义它是否必须的,它的值是否可以用诸如<%= …%>






