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?
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?
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.
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());
}
}
}