jsp2.0之前,定义标签需要继承TagSupport或者BodyTagSupport.jsp2.0引入了SimpleTagSupport简化了编程,那么他们有什么区别呢?首先要说TagSupport和BodyTagSupport的区别。首先需要建立一个tld(tag library define)文件,这个文件主要有以下几个关键要素
-
<uri>http://hufei.com.cn</uri>
-
<description>
-
A simple tab library for the examples
-
</description>
-
<tag>
-
<name>hello</name>
-
<tag-class>cn.hufei.tag.HelloTag</tag-class>
-
<body-content>empty</body-content>
-
<attribute>
-
<name>content</name>
-
<required>false</required>
-
<fragment>false</fragment>
-
</attribute>
-
</tag>
如以上代码可以看到uri元素是整个标签库的区分,在页面是通过<%>其中的uri对应这里边的uri.其他的属性就不一一介绍了,本文章主要是讲解继承不同类,调用的不同方法的时机。
如果我们的类继承的是TagSupport类,那么首先会调用 setPageContext(),setParent(),SetAttribute().然后调用dostartTag();根据dostartTag的返回值确定是否要输出到当前页面的输出流(为EVAL_BODY_INCLUDE输出),紧接着调用doEndTag();根据返回值确定是否要执行页面的以下部分(如果是EVAL_PAGE执行),最后release;
如果继承了BodyTagSupport了,在实现了doStartTag()之后会出现两个分支,如果返回EVAL_BODY_INCLUDE,则走第一条分支,如果是EVAL_BODY_BUFFERED.走第二条
1:计算标签体的内容输入到客户端,调用doEndTag,release;
2:setBodyContent,doInitBody,计算标签体并输入到缓冲区中。。
如果是继承的SimpleTagSupport,只要重写doTag方法就行了,在里边配置执行的过程
阅读(273) | 评论(0) | 转发(0) |