我有一个这样的自定义jsp标签:
<a:customtag>
The body of the custom tag...
More lines of the body...
</a:customtag>
在自定义标签中,如何获取正文的文本?
答案 0 :(得分:12)
这很复杂,因为有两种机制。
如果您正在扩展SimpleTagSupport,则会获得getJspBody()方法。它返回一个JspFragment,您可以invoke(Writer writer)将正文内容写入编写器。
你应该使用SimpleTagSupport,除非你有特定的理由使用BodyTagSupport(比如遗留标签支持),因为它很简单。
如果 使用经典代码,则可以扩展BodyTagSupport,以便访问getBodyContent()方法。这将为您提供一个BodyContent对象,您可以从中检索正文内容。
答案 1 :(得分:8)
如果您使用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>
答案 2 :(得分:5)
要展开Brabster's answer,我已使用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());
}
}
}