Henri Yandell wrote:
Not great feedback I'm afraid - the suggestion of fixing things in
doEndTag sounds fine to me (null or ""), but I'm not deep into the
spec. If it's not an attribute of the tag, and it'll get recreated
anew in doStartTag I don't see any reason to avoid GC having a chance.
At least it's something ;-). I'd thought about trying to track down the
right place to post some questions to the current JSTL (1.2) implementors
(Glassfish? jstl-spec-public and/or jsp-spec-public on java.net? or?), but
haven't bothered yet. I'll probably just go ahead with the fix by doing two
things:
Have org.apache.taglibs.standard.tag.common.core.SetSupport implement
TryCatchFinally. Based on my reading of the JLS, this should maintain
binary compatibility.
In the doFinally method, set the target field to "".
Just to be clear on what should happen, it won't "get recreated anew in
doStartTag". For a request-time value, the container should always call
setTarget before calling doStartTag/doEndTag. For a literal value, doEndTag
always throws an exception, so there's no need to worry about persisting
the value.
Same for the c:forEach, though I've no great itch to hunt down other cases.
I haven't looked at forEach yet...
Hen
On 3/27/07, Kris Schneider <[EMAIL PROTECTED]> wrote:
On further reflection, perhaps target should be set to "" instead of null
to maintain exception consistency...
Kris Schneider wrote:
> http://issues.apache.org/bugzilla/show_bug.cgi?id=33934
>
> After some thought, here's why I think we can actually set the target
> property to null in doEndTag (or doFinally, if we add it) instead of
> release.
>
> If a request-time value is used (scriptlet expression or EL), then the
> spec requires that the container must reset the property's value
between
> all reuses. In other words, setTarget should be called each time the
tag
> is (re)used.
>
> If a literal value is used, then the container is not required to reset
> the property's value. First, there's type conversion to deal with.
> However, since the property's type is Object, a new String instance
will
> be used. In turn, this will cause doEndTag to throw an exception
because
> String does not expose any writable Bean properties.
>
> So, AFAICT, the only way to get a valid value for target is with a
> request-time value.
>
> Feedback?
>
> P.S.
> This is in the context of JSP 2.0 and JSTL 1.1. It may still hold true
> for JSP 1.2 and JSTL 1.0, even for different reasons ;-), but I haven't
> thought much about it...
--
Kris Schneider <mailto:[EMAIL PROTECTED]>
D.O.Tech <http://www.dotech.com/>
--
Kris Schneider <mailto:[EMAIL PROTECTED]>
D.O.Tech <http://www.dotech.com/>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]