JSTL "c:out" uses body-default, even if value is not NULL or "". the error is easy to test: copy the standard-examples.war from http://jakarta.apache.org/taglibs/doc/standard-doc/intro.html into your webapps- directory, and open this url: http://127.0.0.1:8080/standard- examples/elsupport/Out.jsp you can see the source-code here: http://127.0.0.1:8080/standard- examples/ShowSource.jsp?filename=/elsupport/Out.jsp "Howe" has a cell-phone-number and the string "no cell phone specified"... thats the bug. the error doesn't occur in bea weblogic 6.1 thanks for your help!! greeting, nathanael
Actually there are two problems here: 1) Jasper one - if tag implements body tag support and sometimes body is empty and sometimes not, then we may have next problem: a)Tag uses body (bodyContent set) b)Tag sent to pool (bodyContent set) b)Tag uses empty body (old bodyContent set). I've resolved this by setting bodyContent attribute to null before sending tag to pool: Generator.java, line 1440: if (ctxt.getOptions().isPoolingEnabled()) { //We must reset body before sending to pool if it was set before if (n.implementsBodyTag() && n.getBody() != null) { out.printin(tagHandlerVar); out.println(".setBodyContent(null);"); } out.printin(n.getTagHandlerPoolName()); out.print(".reuse("); out.print(tagHandlerVar); out.println(");"); }
Second problem is with standart taglib: it uses needBody variable, but do not resets it to false in StartTag ( and we may be NOT called release between uses) Fix is: OutSupport.java, line 122: public int doStartTag() throws JspException { try { needBody = false; // print value if available; otherwise, try 'default' if (value != null) { out(pageContext, escapeXml, value.toString()); return SKIP_BODY; } else {
This has been fixed for JSTL 1.0.3, currently available via the nightly builds. *** This bug has been marked as a duplicate of 16069 ***