У меня есть собственный тег jsp, например:
<a:customtag>
The body of the custom tag...
More lines of the body...
</a:customtag>
Как в настраиваемом теге получить текст тела?
У меня есть собственный тег jsp, например:
<a:customtag>
The body of the custom tag...
More lines of the body...
</a:customtag>
Как в настраиваемом теге получить текст тела?
Это сложно, потому что есть два механизма.
Если вы расширяете SimpleTagSupport, вы получаете getJspBody (). Он возвращает JspFragment, который можно invoke (Writer writer) для записи основного содержимого автору.
Вам следует использовать SimpleTagSupport, если у вас нет особой причины использовать BodyTagSupport (например, поддержку устаревших тегов), поскольку это - ну - проще.
Если вы используете классические теги, вы расширяете BodyTagSupport и таким образом получаете доступ к getBodyContent (). Это дает вам объект BodyContent, из которого вы можете получить содержимое тела.
Если вы используете собственный тег с подходом jsp 2.0, вы можете сделать это следующим образом:
make-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>
An important head line
на <t:MyMessageTag key="someKey">
, <jsp:doBody />
похоже, заменит его на <t:mymessagetag key="someKey">
в нижнем регистре и не буду оценивать этот jsp-тег. Есть идеи, почему? Или как обрабатывать такие вложенные теги?
- person outofmind; 27.03.2018
body-content
как tagdependent
вместо scriptless
по умолчанию - теперь все в порядке.
- person outofmind; 28.03.2018
Чтобы расширить Brabster's ответ, я использовал 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());
}
}
}