On 28 Jul 2002, David M. Karr wrote:

> Date: 28 Jul 2002 14:58:23 -0700
> From: David M. Karr <[EMAIL PROTECTED]>
> Reply-To: Struts Developers List <[EMAIL PROTECTED]>
> To: [EMAIL PROTECTED]
> Subject: Re: Tags: write private "init()" method to init. vars from cons.
>     and release
>
> >>>>> "Craig" == Craig R McClanahan <[EMAIL PROTECTED]> writes:
>
>     Craig> On 28 Jul 2002, David M. Karr wrote:
>
>     >> Is there some reason the Struts custom tags have redundant initializations of
>     >> their instance variables, once as implicit initializations, and once in the
>     >> "release()" method?  I hope that this code is either generated, or someone has
>     >> carefully examined every single one to verify that the implicit init. value is
>     >> identical to the value it's set to in "release()".
>     >>
>     >> It would seem to me that a better strategy would be to write a private 
>"init()"
>     >> method which initializes all the instance variables to their initial state, 
>and
>     >> which is called from the "release()" method and a new no-args constructor (I
>     >> would guess that none of the tags have a defined constructor).
>     >>
>     >> Is there a good reason for how this currently works?
>
>     Craig> It actually turns out that initializing to non-null values tends to get
>     Craig> you in trouble in containers that recycle tag instances -- we really need
>     Craig> to go through and rip that out (as well as the tendency to modify the
>     Craig> specified attribute values during doStartTag() or doEndTag(), which will
>     Craig> cause nothing but grief with optimizing page compilers.
>
> The issues with recycled tag instances is exactly why I was looking at this.  I
> assume, by this statement, that you agree the current strategy isn't right?  If
> so, I'll submit a bug for this.  I plan on building a patch for this myself,
> but I'm not certain when I'll get to this.  As I described, I would remove the
> implicit initializations, implement the "init()" method with the correct
> initializations, create a no-args constructor, and call the "init()" method
> from both "release()" and the no-args constructor.  That should just take a few
> minutes to modify very tag :) .
>

I would rather avoid even having a private init() method -- I'd rather see
us initialize all String-valued attributes to null in their declarations
and in the reset() methods.  Any place in the code we've previously
depended on the default value should do explicit checks for null and
modify their behavior accordingly.

> Do you have a good example of your other statement, about modifying the
> specified attribute values in the tag methods?  I may have seen that, but I
> want to be sure I know what you're referring to.
>

I've fixed them as I've seen them, so don't know of any offhand -- but I
would review the most complicated tags like <html:form> first.  If you see
something like "this.foo = ..." in a tag's doStartTag() or doEndTag()
method, that is a danger sign.

Craig


> --
> ===================================================================
> David M. Karr          ; Java/J2EE/XML/Unix/C++
> [EMAIL PROTECTED]
>
>
> --
> To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
>
>


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

Reply via email to