Yup, it's part of the spec to do that. The include writes directly to the
request while the tag writes to the body. (which is buffered until the end
in which case it is written to it's parent or if no parent then the
request.) The only way I have found to get around this is to write my own
include and included page tags. 
  My include stuffs the current out into the request and then calls the
included page. The included page tag grabs the out from the request and
writes to it instead of the request, the result is an inline include. 
  Another way is to have an include that uses a URL and writes the result
inline. The upside is you don't need the included page tags but the down
side is it isn't an include in the JSP since anymore (it has a different
request) and it takes more resources (it is another hit to your site).
  This is just an ugliness in the spec because they didn't think about
nested tags that deeply. 
  Hope this helps.
  -Jeff Ward

 -----Original Message-----
From:   Alex Tang [mailto:[EMAIL PROTECTED]] 
Sent:   Tuesday, January 30, 2001 10:16 AM
To:     [EMAIL PROTECTED]
Cc:     [EMAIL PROTECTED]
Subject:        Using a jsp:include action (JSP 1.1) within a BodyTag taglib
tag

hi folks.  (Sorry for the wide distribution, this question seems to span
both the JSP and taglib realm).

I'm having a problem with the interaction of a taglib BodyTag and a
jsp:include action (or an equivalent taglib tag that uses a
pageContext.forward()).  For example, if I have:

     <foo:myBodyTag>
       Blah Blah...
       <jsp:include page="..."/>
     </foo:myBodyTag>

The output from the jsp:include action always appears BEFORE the output
from the myBodyTag taglib tag.

(BTW, I'm using Tomcat 3.1)

In reading the JSP 1.1 spec, section 5.4.5 says


     The BodyContent Class

     The BodyContent is a subclass of JspWriter that can be used to
     process body evaluations so they can retrieved later on. The
     class has methods to convert its contents into a String, to
     read its contents, and to clear the contents.

     The buffer size of a BodyContent object is "unbounded". A
     BodyContent object cannot be in autoFlush mode. It is not
     possible to invoke flush on a BodyContent object, as there is
     no backing stream. This means that it is not legal to do a
     jsp:include when out is not bound to the top-level JspWriter.

     ...

>From the last sentence, does this mean that it is illegal to use a
jsp:include action (or an equivalent taglib tag that performs a
pageContext.include()) within a BodyTag?

Is there a way to get around this in JSP 1.1 (Specifically Tomcat 3.x)?
Would setting the page buffer to none help?  (If so, what problems or
drawbacks are there for settign the page buffer to none?)

I've looked through the JSP 1.2 spec (although not completely), and I
did not see any mention of this type of restriction.  Is this correct?

I realize that this is somewhat contanier specific, but does anyone know
if Tomcat 4.x allow for jsp:include actions within a BodyTag?

Thank you for your time.

...alex...



Reply via email to