Пользовательский тег JSP - Как получить тело тега? - PullRequest
9 голосов
/ 23 марта 2010

У меня есть собственный тег jsp, подобный этому:

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

В пользовательском теге как я могу получить текст о том, что это за тело?

Ответы [ 3 ]

12 голосов
/ 23 марта 2010

Это сложно, потому что есть два механизма.

Если вы расширяете SimpleTagSupport, вы получаете метод getJspBody () . Он возвращает JspFragment, который вы можете вызывать (Writer Writer) , чтобы содержимое тела было записано в писатель.

Вы должны использовать SimpleTagSupport, если у вас нет особых причин использовать BodyTagSupport (например, поддержку устаревших тегов), поскольку это - ну, конечно, проще.

Если вы используете классические теги, вы расширяете BodyTagSupport и, таким образом, получаете доступ к методу getBodyContent () . Это дает вам объект BodyContent, из которого вы можете получить содержимое тела.

8 голосов
/ 30 декабря 2013

Если вы используете пользовательский тег с подходом jsp 2.0, вы можете сделать это следующим образом:

макияж h1.tag

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

Используйте его в JSP как:

<%@ taglib prefix="t" tagdir="/WEB-INF/tags"%>
<t:make-h1>An important head line </t:make-h1>
5 голосов
/ 13 апреля 2010

Чтобы расширить ответ Брабстера , я использовал SimpleTagSupport.getJspBody(), чтобы записать JspFragment во внутренний StringWriter для проверки и манипуляции:

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

}

...