11,11,09
自定义标签库开发(简单标签的使用和带属性的标签)
一、简单标签的应用:
1、 SimpleTag方法介绍:
(1)setContext方法
用于把JSP页面的pageContext对象传递给标签处理器对象
(2)setParent方法
用于把父标签处理器对象传递给当前标签处理器对象
(3)getParent方法
用于获得当前标签的父标签处理器对象
(4)setJspBody方法
用于把代表标签体的JspFragment对象传递给标签处理器对象
(5)doTag方法
用于完成所有的标签逻辑,包括输出、迭代、修改标签体内容等。在doTag方法中可以抛出javax.servlet.jsp.SkipPageException异常,用于通知WEB容器不再执行JSP页面中位于结束标记后面的内容,这等效于在传统标签的doEndTag方法中返回Tag.SKIP_PAGE常量的情况
1)使用自定义标签控制页面内容(标签体)是否输出
public void doTag() throws JspException, IOException {
// TODO Auto-generated method stub
//JspFragment jf=this.getJspBody();//得到标签体对象
//jf.invoke(this.getJspContext().getOut());
//jf.invoke(null);
}
2)简单标签控制该自定义标签后的JSP内容是否执行
创建一个标签处理器:
public void doTag() throws JspException, IOException {
// TODO Auto-generated method stub
//JspFragment jf=this.getJspBody();
//jf.invoke(null);如果没有标签体,抛异常
throw new SkipPageException();
}
tld文件进行描述
3)简单标签控制迭代
创建一个标签处理器
public void doTag() throws JspException, IOException {
// TODO Auto-generated method stub
JspFragment jf=this.getJspBody();
for(int i=0;i<count;i++)
jf.invoke(null);
}
2、SimpleTag接口方法的执行顺序
3、JspFragment类:
(1) javax.servlet.jsp.tagext.JspFragment类是在JSP2.0中定义的,它的实例对象代表JSP页面中的一段符合JSP语法规范的JSP片段,这段JSP片段中不能包含脚本元素。
(2) JspFragment类中只定义了两个方法:
1) getJspContext方法
用于返回代表调用页面的JsoContext对象
2) setParent方法
二、开发带属性的标签
<csdn:demo8 count=”${4+1}”> //如果有EL表达式,先计算EL表达式的值
</csdn:demo8>
标签处理器中一定也要包含一个似有的属性count和setter方法setter();
dotage()包含业务逻辑代码
还要有tld文件:对标签进行描述:
在tld文件中设置属性:
<tag>
<name>demo8</name>
<tag-class>com.csdn.web.tag.SimpleTagDemo8</tag-class>
<body-content>scriptless</body-content>
<attribute>
<name>count</name> :属性名称
<required>true</required> :属性否为必需的
<rtexprvalue>true|false</rtexprvalue> :是否支持运行时表达式计算,false只能为它写上常量值,true不仅支持常量值,还支持运行时表达式运算
</attribute>
</tag>
例如:
<scdn:demo10 date=”2011-11-12”>
SimpleTagDemo10:
Date date;
有一个setDate(Date d)方法
三、案例:
1、使用标签控制页面逻辑案例:
(1)开发防盗链标签
(2)开发<c:if>标签
(3)开发<c:if><c:else>标签
(4)开发迭代标签
(5)开发html转义标签
(6)打包标签库