DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=4359>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=4359

BodyTag : doInitBody() shouldn't be called when the doStartTag() method returns 
EVAL_BODY_INCLUDE

           Summary: BodyTag : doInitBody() shouldn't be called when the
                    doStartTag() method returns EVAL_BODY_INCLUDE
           Product: Tomcat 4
           Version: 4.0.1 Final
          Platform: Other
        OS/Version: Other
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: Jasper
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


According to the JSP 1.2 spec (10.2.2 - Methods section), the doInitBody() 
method is only called when doStartTag returns EVAL_BODY_BUFFERED. In the 
generated code, the call to doInitBody() is called outside of the block that 
pushes a new BodyContent onto the stack and subsequently passes this to the tag 
handler with the setBodyContent method.

Example of the generated code is as follows.

                            if (_jspx_eval_xxx_filter_0 != 
javax.servlet.jsp.tagext.Tag.EVAL_BODY_INCLUDE) {
                              out = pageContext.pushBody();
                              _jspx_th_xxx_filter_0.setBodyContent
((javax.servlet.jsp.tagext.BodyContent) out);
                          }
                          _jspx_th_xxx_filter_0.doInitBody();

The doInitBody() call needs to put placed wihtin the if block so that it is 
only called when the body content is set on the tag handler.

Thanks
Simon

Reply via email to