23 二月 2008

实现IterationTag接口的标签处理器的生命周期

IterationTag

1、容器在创建标签处理器的实例后,调用setPageContext()方法设置标签的页面上下文,然后调用setParent()方法设置该标签的父标签,如果没有父标签,则设置为null。

2、调用标签处理器的setXXX()方法,设置标签的属性。如果没有定义属性,则没有该步骤。

3、调用doStartTag()方法,该方法可以返回EVAL_BODY_INCLUDE或者SKIP_BODY。如果返回EVAL_BODY_INCLUDE,则执行标签体;如果返回SKIP_BODY,则忽略标签体。

4、执行完标签体之后,doAfterBody()方法被调用,该方法可以返回EVAL_BODY_AGAIN或者SKIP_BODY。如果返回EVAL_BODY_AGAIN ,则重复执行标签体。如果返回 SKIP_BODY,则不再执行标签体。注意,在调用该方法之前,标签体已经被执行了一遍,如果要忽略标签体,需要在doStartTag()方法中返回SKIP_BODY

5、调用doEndTag()方法,该方法返回EVAL_PAGE 或者 SKIP_PAGE。如果返回EVAL_PAGE,则执行JSP页面的余下部分;如果返回SKIP_PAGE,则忽略JSP页面的剩余部分。

6、 容器会缓存标签处理器实例,一旦遇到同样的标签,则重复使用缓存的标签处理器实例。

7、当需要释放标签处理器实例时,release()方法才被调用。

没有评论: