1)自定义标签可以定义一个或多个属性,这样,在jsp页面中应用自定义标签时就可以设置这些属性的值,通过这些属性的值就可以标签处理器传递参数信息,从而提高标签的灵活性和复用性。
2)要想让一个自定义标签具有属性,通常需要完成两个任务:
在标签处理器中编写每个属性的setter方法
在Tld文件中描述标签的属性
3)为自动义标签定义属性时,每个属性必须按照JavaBean的属性命名方式,在标签处理器中定以属性名对应的setter方法,用来接收jsp页面调用自定义标签时传递进来的属性值。例如属性url,在标签处理器类中就要定义相应得setURL(String url)方法。
4)在标签处理器中定义相应的set方法后,Jsp引擎会在解析执行开始标签前,也就是调用dostartTag方法前,会调用set属性方法,为标签设置属性。
5)元素的子元素用于描述自定义标签的一个属性,自定义标签所具有的每个属性都要对应一个元素
taglib
description
tlib-version
short-name
uri
tag
name//标签名
tag-class//类
body-content//empty表示标签体为空
attribute
description
name
required
rtexprvalue
type
6)description:用于指定属性的描述信息
name(必须指定):用于指定属性的名称。属性名称的大小写敏感,并且不能以jsp、_jsp、java和sun开头
required:用于指定在jsp页面中调用自定义标签时是否必须设置这个属性。其取值包括true和false,默认值为false,true表示必须设置
rtexprvalue:runtime expression value(运行时表达式)的英文简写。用于指定属性值是一个静态值或动态值。true和false,默认false。表示只能为该属性值指定静态文本值。true可以设置Jsp动态元素,如:<%= %>。
type:用于指定属性值的Java类型值。
7)简单标签开发示例:
对于if标签:
1-创建一个类继承SimpleTagSupport
public class IfTag extends SimpleTagSupport{
private boolean test;
public void setTest(boolean test) {
this.test = test;
}
@Override
public void doTag() throws JspException, IOException {
if(test) {
this.getJspBody().invoke(null);
}
}
}
2-在tld文件中描述:
<tag>
<name>if</name>
<tag-class>tags.iftag.IfTag</tag-class>
<body-content>scriptless</body-content>
<attribute>
<name>test</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
3-使用:
1.在jsp页面使用taglib命令导入:
<%@ taglib uri=”tld文件中的uri” prefix=”self”%>
2.测试:
<self:if test="true">show</self:if>
<self:if test="false">show</self:if>
8)打包标签库
1-可以新建一个Java工程,将需要打包的类全部复制到Java工程中
2-导入jsp-api.jar,servlet-api.jar,然后add to buildpath
3-export导出
4-使用,自己开发的jar的使用方式和sun公司开发出的相同