Does this suggest that the core tag libraries (specifically
org.apache.struts.taglib.html) have the wrong model for cleanup? That is,
they reset their tags to known-good state in release() and not at the end of
doEndTag(). Should this resetting take place after doEndTag() and release()
be reserved for releasing long-held resources (there seem to be none of
these)?

> -----Original Message-----
> From: Craig R. McClanahan [mailto:[EMAIL PROTECTED]]
> Sent: Tuesday, February 04, 2003 12:25 PM
> To: Struts Developers List
> Subject: Re: DO NOT REPLY [Bug 16749] - Struts EL tag
> handlers cannot be
> reused by containers
>
>
>
>
> On Tue, 4 Feb 2003 [EMAIL PROTECTED] wrote:
>
> >
> > Struts EL tag handlers cannot be reused by containers
> >
>
> It sounds like these tags definitely have a problem.  There's
> been some
> recent discussion on TOMCAT-USER about designing tags that
> work reusably
> as well.
>
> The bottom line:
>
> * The container can reuse instances of tag handlers
>   when it sees that exactly the same set of attributes
>   is used (not necessarily the same values).
>
> * This kind of reuse can happen whether or not the
>   container implements "tag pooling".
>
> * When a tag handler instance is reused, the JSP page
>   compiler can decide if it has already set a particular
>   property on that instance, and omit the second set call.
>   For example, in:
>     <foo:bar a="1" b="2/>
>     <foo:bar a="1" b="3"/>
>   The second setA() call can be omitted, since the container
>   knows that it already called setA("1") the first time.
>
> * If a tag instance is going to be reused, the doEndTag()
>   call on the first use is going to be followed by the
>   doStartTag() call of the second use.  Any per-use cleanup
>   activity needs to happen at the end of doEndTag().
>
> * The net effect of all this is an important restriction -- it's
>   not legal for a tag handler to modify the values stored by
>   the setter calls from the page, *anywhere* in the path from
>   doStartTag() through doEndTag().
>
> * The container will call release() after it has used the
>   instance for the last time.
>
> Craig
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to