在没有迭代标签的时候,如果要循环输出内容到网页,我们往往这样做:
%>
上面的while就是一个迭代,如果我们要开发出这样的标签,一般需要二个开发类,一具类实现BodyTagSupport接口,另一个类扩展TagExtraInfo类。TagExtraInfo旨在提供标签运行时的信息。下面来做个实例
IterateTag.java
自定义标签之  开发迭代的标签库package eflylab;
自定义标签之  开发迭代的标签库
import javax.servlet.jsp.*;
自定义标签之  开发迭代的标签库
import javax.servlet.jsp.tagext.*;
自定义标签之  开发迭代的标签库
import java.util.*;
自定义标签之  开发迭代的标签库
自定义标签之  开发迭代的标签库
public class IterateTag extends BodyTagSupport
}
由于BodyTagSupport类实现了IteratorTag接口,所以在开发迭代标签时,可以直接从BodyTagSupport类继承,IterateTag就是从BodyTagSupport类继承的例子。在IterateTag中,有3个属性,它们是name,type和it。name代表了在pageContext中标识的一个属性的名字;type代表了待迭代的内容的类型;it代表了要迭代的内容。在IterateTag中必须提供这些属性的setter方法,并且在JSP中使用这些属性时必须提供对应的值。
在doStartTag方法中,如果it不为null,那么就进行第一次迭代。在continueNext方法中如果it还有下一个,那么就继续迭代,如果没有下一个了,就返回SKIP_BODY,表示不再迭代。
除了上面的标签类外,还需要开发一个表示标签信息的类,如下
iterateTEI.java
自定义标签之  开发迭代的标签库package eflylab;
自定义标签之  开发迭代的标签库
import javax.servlet.jsp.tagext.*;
自定义标签之  开发迭代的标签库
//TagExtraInfo用于提供一些在标签翻译时相关的信息。
自定义标签之  开发迭代的标签库
public class IterateTEI extends TagExtraInfo
}

需要说明的是VariableInfo的几个参数,如下:
NESTED  标签中的参数在starttag到endtag之间是有效的。
AT_BEGIN  标签中的参数在标签的开始到JSP结束是有效的。
AT_END  标签中的参数在标签的结束到JSP页面的结束是有效的。

当然另外在标签的描述文件TLD中要加上这二类的描述

自定义标签之  开发迭代的标签库<tag>
自定义标签之  开发迭代的标签库      
<name>iterate</name>
自定义标签之  开发迭代的标签库      
<tag-class>eflylab.IterateTag</tag-class>
自定义标签之  开发迭代的标签库      
<tei-class>eflylab.IterateTEI</tei-class>
自定义标签之  开发迭代的标签库      
<body-content>jsp</body-content>
自定义标签之  开发迭代的标签库      
<attribute>
自定义标签之  开发迭代的标签库          
<name>collection</name>
自定义标签之  开发迭代的标签库          
<required>true</required>
自定义标签之  开发迭代的标签库          
<rtexprvalue>true</rtexprvalue>
自定义标签之  开发迭代的标签库      
</attribute>
自定义标签之  开发迭代的标签库      
<attribute>
自定义标签之  开发迭代的标签库          
<name>name</name>
自定义标签之  开发迭代的标签库          
<required>true</required>
自定义标签之  开发迭代的标签库      
</attribute>
自定义标签之  开发迭代的标签库      
<attribute>
自定义标签之  开发迭代的标签库          
<name>type</name>
自定义标签之  开发迭代的标签库          
<required>true</required>
自定义标签之  开发迭代的标签库      
</attribute>
自定义标签之  开发迭代的标签库  
</tag>
测试代码:
}
>
运行:
自定义标签之  开发迭代的标签库

相关文章: