views:

140

answers:

2

I have a custom jsp tag like this:

<a:customtag>
    The body of the custom tag...
    More lines of the body...
</a:customtag>

In the custom tag, how can I get the text of what the body is?

+3  A: 

It's complicated because there are two mechanisms.

If you're extending SimpleTagSupport, you get getJspBody() method. It returns a JspFragment that you can invoke(Writer writer) to have the body content written to the writer.

You should use SimpleTagSupport unless you have a specific reason to use BodyTagSupport (like legacy tag support) as it is - well - simpler.

If you are using classic tags, you extend BodyTagSupport and so get access to a getBodyContent() method. That gets you a BodyContent object that you can retrieve the body content from.

Brabster
Thanks, didn't know about that class, it works.
Kyle
+1  A: 

To expand on Brabster's answer, I've used SimpleTagSupport.getJspBody() to write the JspFragment to an internal StringWriter for inspection and manipulation:

public class CustomTag extends SimpleTagSupport {
    @Override public void doTag() throws JspException, IOException {
        final JspWriter jspWriter = getJspContext().getOut();
        final StringWriter stringWriter = new StringWriter();
        final StringBuffer bodyContent = new StringBuffer();

        // Execute the tag's body into an internal writer
        getJspBody().invoke(stringWriter);

        // (Do stuff with stringWriter..)

        bodyContent.append("<div class='custom-div'>");
        bodyContent.append(stringWriter.getBuffer());
        bodyContent.append("</div>");

        // Output to the JSP writer
        jspWriter.write(bodyContent.toString());
    }
}

}

brass-kazoo