Yep this is a nasty one. JRun has this problem too but we
are fixing it.
The spec only says where these variables are available, not where they
are declared. So I would call it a bug in Jasper (and JRun). AT_END and
AT_BEGIN variables should be declared at the top of _jspService
(or as member variables for STM JSPs). Trying to use the variables
before they have been assigned will result in a compiler error if
they weren't assigned an initial value (which they shouldn't).
Clarifications like this should be collected in a "interpreting JSP
semantics
for the Java scripting language" section.
Otherwise you end up with constructs like this:
<x:b>
<x:a/>
</x:b>
<% String status2 = pageContext.getAttribute("status"); %>
> -----Original Message-----
> From: Craig R. McClanahan [mailto:[EMAIL PROTECTED]]
> Sent: Monday, May 21, 2001 7:15 PM
> To: [EMAIL PROTECTED]
> Cc: [EMAIL PROTECTED]; [EMAIL PROTECTED]
> Subject: Re: AT_BEGIN, AT_END
>
>
> Hi Shawn,
>
> This looks to me like it really is a bug in Tomcat, based on the
> description of how AT_BEGIN and AT_END are supposed to work
> (for example,
> on p. 200 of JSP 1.2 PFD2). The "status" variable exposed by
> the <x:a>
> tag should really be visible where you have it accessed.
>
> However, the question of "how early is too early" is an interesting
> one. I've cc'd the JSR-053 expert group (responsible for the JSP
> spec) for more feedback on that question.
>
> Craig McClanahan
>
>
>
> On Mon, 21 May 2001, Shawn Bayern wrote:
>
> > This may not really be the best place to raise this
> question, but it's
> > related to tag development and may affect the way tags
> should be designed.
> >
> > The JSP (1.2 PFD2) spec calls for AT_BEGIN and AT_END to provide for
> > availability of scripting variables from the appropriate
> point "until the
> > end of the page."
> >
> > I don't see any way of accomplishing that without also making the
> > variables accessible earlier on the page as well. A
> scripting-variable
> > declaration approximately adjacent to the calls to doStartTag() and
> > doEndTag() -- which is where Jasper locates the declaration
> in the last
> > version I checked -- might be contained within a Java '{
> ... }' block as
> > the result either of a scriptlet or of a block that the
> translator adds
> > because of a stack of tags. Thus, the declaration would
> have only the
> > narrow lexical "block" scope necessitated by the Java
> language, and it
> > would not be available outside the containing block.
> >
> > To make it concrete... In the version of Jasper I tested with (with
> > Tomcat 4.0 b3), if <x:a> produces an AT_BEGIN scripting
> variable called
> > 'status', it will not be accessible when it's used in the following
> > example:
> >
> > <x:b>
> > <x:a/>
> > </x:b>
> > <%= status %>
> >
> > That may just be a bug in Jasper, or it may follow the
> intent of the spec.
> > (I'm not sure -- I can't find anything in the spec that specifically
> > supports or refutes this example, other than the language
> that describes
> > AT_BEGIN as making a scripting variable available "until
> the end of the
> > page." This makes me thing it's a bug.)
> >
> > If this is a bug, though, then the problem is that any fix
> would require
> > the translator to declare a variable before any sub-block
> present on the
> > page, and this would make scripting variables available too
> early. (The
> > spec doesn't seem to rule that out -- i.e., maybe there's
> no such thing as
> > "too early" -- but I could be wrong.)
> >
> > Does anyone know how other container handle similar
> situations? Any other
> > thoughts? I might just be missing something obvious.
> >
> > Shawn
> >
> >
>