《JSP自定义标签库开发:从接口实现到适配器类应用》
1. 实现IterationTag接口
在之前的示例中,我们使用Tag接口来决定是否包含或跳过标签的主体内容。不过,如果包含主体内容,它只会被包含一次。而IterationTag接口扩展了Tag接口,允许我们多次包含标签的主体内容,类似于编程语言中的循环功能。
1.1 理解IterationTag方法
IterationTag继承了Tag接口的所有功能。容器通过调用 setPageContext()
和 setParent()
方法为迭代标签设置适当的引用,使用setter方法传递属性值,并调用 doStartTag()
。根据 doStartTag()
的返回值,容器会决定是包含还是跳过主体内容。
- 如果 doStartTag()
返回 SKIP_BODY
,则跳过主体内容,容器调用 doEndTag()
,此时 doAfterBody()
方法不会被调用。
- 如果 doStartTag()
返回 EVAL_BODY_INCLUDE
,则计算标签的主体内容,并将结果包含在输出中,容器首次调用 doAfterBody()
。
doAfterBody()
是IterationTag接口定义的唯一方法,它让标签处理器有机会重新计算