I'm using Tomcat 4.1.24-LE-jdk14, and have written a simple taglib by
extending the TagSupport class. It basically works, but the lifecycle is
being handled differently than I expected. My tag has no body, and has one
required attribute. My JSP page contains several invocations, all with
different values for the attribute. I expected setPageContext() to be called
once, followed by a bunch of doStartTag() / doEndTag() calls, followed by
one release() call. Instead, setPageContext() is being called for each
invocation of my tag (followed by doStartTag() and doEndTag()). My release()
method is *never* called.

I'm basing my expectations on the JSP 1.2 spec, esp pp. 163-164, and the
discussion about "Tag handler life cycle and instance reuse" at
http://www.onjava.com/pub/a/onjava/2001/11/07/jsp12.html?page=2.

The two issues in my mind are: (a) Is this working according to spec?
Perhaps I misunderstood how it's supposed to work. and (b) Could this be
done more efficiently? Replacing several scriptlet method calls with a
taglib caused the JSP's class file to double in size.

The code that's being generated for the JSP includes a bunch of private
methods that look like this:
  private boolean _jspx_meth_xlate_get_61(javax.servlet.jsp.PageContext
pageContext)
          throws Throwable {
    JspWriter out = pageContext.getOut();
    /* ----  xlate:get ---- */
    com.eloquent.ecs.tags.xlate.EXlateTagGet _jspx_th_xlate_get_61 =
(com.eloquent.ecs.tags.xlate.EXlateTagGet)
_jspx_tagPool_xlate_get_key.get(com.eloquent.ecs.tags.xlate.EXlateTagGet.cla
ss);
    _jspx_th_xlate_get_61.setPageContext(pageContext);
    _jspx_th_xlate_get_61.setParent(null);
    _jspx_th_xlate_get_61.setKey("jsp.edownloadplayer.File");
    int _jspx_eval_xlate_get_61 = _jspx_th_xlate_get_61.doStartTag();
    if (_jspx_th_xlate_get_61.doEndTag() ==
javax.servlet.jsp.tagext.Tag.SKIP_PAGE)
      return true;
    _jspx_tagPool_xlate_get_key.reuse(_jspx_th_xlate_get_61);
    return false;
  }

Thanks for any insights you can provide.

Daniel Rabe
Eloquent, Inc.

Reply via email to