У меня есть пользовательский тег jsp как это:
<a:customtag>
The body of the custom tag...
More lines of the body...
</a:customtag>
В пользовательском теге, как я могу получить текст того, каково тело?
Это сложно, потому что есть два механизма.
Если вы расширяете SimpleTagSupport, вы получаете метод getJspBody () . Он возвращает JspFragment, который можно вызвать (Writer writer) , чтобы записать содержимое тела в писатель.
Вам следует использовать SimpleTagSupport, если у вас нет особой причины использовать BodyTagSupport (например, поддержку устаревших тегов), поскольку это - ну - проще.
Если вы используете классические теги, вы расширяете BodyTagSupport и таким образом получаете доступ к методу getBodyContent () . Это дает вам объект BodyContent, из которого вы можете получить содержимое тела.
Чтобы расширить ответ Brabster'а, я использовал 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());
}
}
}