Default return values from TagSupport

If you don’t override the TagSupport lifecycle methods that return an integer, be aware of the default values the TagSupport method implementations return. The TagSupport class assumes that your tag doesn’t have a body (by returning SKIP_BODY) from doStartTag()), and that if you DO have a body that’s evaluated, you want it evaluated only once (by returning SKIP_BODY from doAfterBody()). It also assumes that you want the rest of the page to evaluate (by returning EVAL-PAGE from doEndtag()).

Default return values when you don’t override the TagSupport method implementation

image with no caption

The TagSupport class assumes your tag doesn’t have a body, or that if the body IS evaluated, that the body should be evaluated only ONCE.

It also assumes that you always want the rest of the page to be evaluated.

Note

doStartTag() and doEndTag() run exactly once.

You really must know this lifecycle for the exam. Don’t forget that doStartTag() and doEndTag() are always called, and they’re called only once, regardless of anything else that happens. But doAfterBody() can run from 0 to many times, depending on the return value of doStartTag() and previous doAfterBody() calls.

Note

You MUST override doStartTag() if you want the tag body to be evaluated!!

Think about it! The default return value from doStartTag() is SKIP_BODY, so if you want the body of your tag evaluated, and you extend TagSupport, you MUST override doStartTag() if for no other reason than to return EVAL_BODY_INCLUDE.

With doAfterBody(), it should be obvious that if you want to iterate over the body, you have to override that method as well, since its return value is SKIP_BODY.

Note

The Container can reuse Classic tag handlers!

Watch out—this is completely different from SimpleTag handlers, which are definitely NOT reused. That means you have to be very careful about instance variables—you should reset them in doStartTag().

The Tag interface does have a release() method, but that’s called only when the tag handler instance is about to be removed by the Container. So don’t assume that release() is a way to reset the tag handler’s state in between tag invocations!

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset