开发者

Custom JSP tag - How do I get the body of the tag?

开发者 https://www.devze.com 2022-12-23 17:41 出处:网络
I have a custom jsp tag like this: <a:customtag> The body of the custom t开发者_StackOverflowag...

I have a custom jsp tag like this:

<a:customtag>
    The body of the custom t开发者_StackOverflowag...
    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.


If you are using a custom tag with jsp 2.0 approach, you can do it as:

make-h1.tag

<%@tag description="Make me H1 " pageEncoding="UTF-8"%>   
<h1><jsp:doBody/></h1>

Use it in JSP as:

<%@ taglib prefix="t" tagdir="/WEB-INF/tags"%>
<t:make-h1>An important head line </t:make-h1>


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

}

0

精彩评论

暂无评论...
验证码 换一张
取 消