There is still a bug in Jasper 2 (tomcat 4.1.10) that generates incorrect
code for IterationTag (s). There is no variable synchronization between
doStartTag() and the loop body.

The following (snippet) of a jsp page with an IterationTag ...

--- <snip> ---
       <p> I can count to ten. </p>
       <p> <ul>
               <lt:forEach list="<%=countToTen()%>" name="counter"
type="java.lang.Integer">
                   <li> <%=counter%>
               </lt:forEach>
           </ul>
       </p>

--- <snip> ---

Generates the following servlet code ...

--- <snip> ---
      /* ----  lt:forEach ---- */
      looptest.tag.ForEachTag _jspx_th_lt_forEach_0 =
(looptest.tag.ForEachTag)
_jspx_tagPool_lt_forEach_type_name_list.get(looptest.tag.ForEachTag.class);
      _jspx_th_lt_forEach_0.setPageContext(pageContext);
      _jspx_th_lt_forEach_0.setParent(null);
      _jspx_th_lt_forEach_0.setList(countToTen());
      _jspx_th_lt_forEach_0.setName("counter");
      _jspx_th_lt_forEach_0.setType("java.lang.Integer");
      int _jspx_eval_lt_forEach_0 = _jspx_th_lt_forEach_0.doStartTag();
      if (_jspx_eval_lt_forEach_0 != javax.servlet.jsp.tagext.Tag.SKIP_BODY)
{
        java.lang.Integer counter = null;
        do {
          out.write("\n                   ");
          out.write("<li> ");
          out.print(counter);
          out.write("\n               ");
          int evalDoAfterBody = _jspx_th_lt_forEach_0.doAfterBody();
          counter = (java.lang.Integer)
pageContext.findAttribute("counter");
          if (evalDoAfterBody !=
javax.servlet.jsp.tagext.BodyTag.EVAL_BODY_AGAIN)
            break;
        } while (true);
      }
      if (_jspx_th_lt_forEach_0.doEndTag() ==
javax.servlet.jsp.tagext.Tag.SKIP_PAGE)
        return;
      _jspx_tagPool_lt_forEach_type_name_list.reuse(_jspx_th_lt_forEach_0);
      out.write("\n           ");
      out.write("</ul>\n       ");
      out.write("</p>\n   ");

--- <snip> ---

I think that there should be variable synchronization code somewhere between
doStartTag and the first out.write().


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

Attachment: looptest.tar.gz
Description: Binary data

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

Reply via email to