二、带属性的标签
<csdn:demo8 count="8">
</csdn:demo8>
标签处理器中一定也得包含一个私有的属性count和setter方法
doTag()包含业务逻辑代码
tld文件:
<tag>
<name></name>
<tag-class>com.hbsi.web.tag.SimpleTagDemo8</tag-class>
<body-content></body-content>
<attribute>
<name></name>
<required>true|false</required>
<rtexprvalue>true|false</rtexprvalue>
</attribute>
</tag>
JspFragment类
WEB容器在处理简单标签的标签体式,会把标签容器用一个JspFragment对象表示,并调用标签处理对象的setJspBody()把JspFragment对象传递给标签处理器对象。
getJspContext():用于返回代表调用页面的JspContext对象
public abstract void invoke(java.io.Writer out):
1、用于执行JspFragment对象所代表的JSP代码片段
2、参数out用于指定将JSpFragment对象执行结果写入到那个输出流对象中,如果传递非参数out的值为null,则将执行结果写入到JspContext.getOut()返回的输出流对象中。
JspFragment.invoke()可以说是JspFragment最重要的方法,利用这个方法可以控制是否执行和输出标签体的内容、是否迭代执行标签体的内容或对标签体的执行结果进行修改后再输出。
1、在标签处理器中如果没有调用JspFragment.invoke方法,其结果就相当于忽略标签体内容;
2、在标签处理器中重复调用JspFragment.invoke方法,则标签体内容将会被重复执行;
要想让一个自定义标签具有属性,通常需要完成两个任务:
在标签处理器中编写每个属性对应的setter方法
在TLD文件中描术标签的属性
为自定义标签定义属性时,每个属性都必须按照JavaBean的属性命名方式,在标签处理器中定义属性名对应的setter方法,用来接收JSP页面调用自定义标签时传递进来的属性值。 例如属性url,在标签处理器类中就要定义相应的setUrl(String url)方法。
在标签处理器中定义相应的set方法后,JSP引擎在解析执行开始标签前,也就是调用doStartTag方法前,会调用set属性方法,为标签设置属性。