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=13132>.
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=13132

missing declaration of variable

           Summary: missing declaration of variable
           Product: Tomcat 4
           Version: 4.1.10
          Platform: Other
        OS/Version: Other
            Status: NEW
          Severity: Critical
          Priority: Other
         Component: Jasper
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


Consider the following JSP-code:

<% if (condition) { %>
<i18n:message key="some.key" 
id="myID"/>
<% } else { %>
<i18n:message key="some.other.key" id="myID"/>
<% } 
%>

This used to work fine in 4.1.8, but stopped working in 4.1.10.
In 4.1.8 this code would be 
compiled to this:
public void _jspService(HttpServletRequest request, 
HttpServletResponse response) {

[snip some declarations]

java.lang.String myID = 
null;

 if (request.getParameter("test") == null) {
      /* ----  i18n:message ---- */
      {
        [snip some 
custom-tag stuff]
        if (_jspx_th_i18n_message_0.doEndTag() == 
javax.servlet.jsp.tagext.Tag.SKIP_PAGE)
          return;
        myID = (java.lang.String) 
pageContext.findAttribute("myID");
 } else { 
       [snip pretty much the same code again]
 
}

but as of 4.1.10, the declaration of the variable myID was put near the custom-tag 
call, so the 
compiled code looks like this:
public void _jspService(HttpServletRequest request, 
HttpServletResponse response) {
  [snip declarations]

try {
 if 
(request.getParameter("test") == null) {
      /* ----  i18n:message ---- */
      [snip custom-tag stuff]
      if 
(_jspx_th_i18n_message_0.doEndTag() == javax.servlet.jsp.tagext.Tag.SKIP_PAGE)
        
return;
!!>>>   java.lang.String myID = null;     <<<!!
      myID = (java.lang.String) 
pageContext.findAttribute("myID");
} else {
      /* ----  i18n:message ---- */
      [snip custom-tag 
stuff]
      if (_jspx_th_i18n_message_1.doEndTag() == 
javax.servlet.jsp.tagext.Tag.SKIP_PAGE)
        return;
!!>>> no declaration of myID here     
<<<!!
      myID = (java.lang.String) pageContext.findAttribute("myID");
}

and so Jasper 
correctly complains "cannot resolve symbol myID" in the else-clause, because myID is 
only 
declared once - in the if-clause. (!!)

I assume the fault is on the tomcat-compiler, but it might 
of course well be that the <i18n:message>-tag just relied on the behaviour of tomcat 
and that the 
handling of that kind of variables isn't even standardized.

PS: If the snippets I put in here 
are not enough context, please email me ([EMAIL PROTECTED]) so I can provide more 
information.

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

Reply via email to