我有一个自定义的JSP标签是这样的:自定义JSP标记 - 如何获取标记的主体?
<a:customtag>
The body of the custom tag...
More lines of the body...
</a:customtag>
在自定义标签,我怎么能得到的身体是什么文字?
我有一个自定义的JSP标签是这样的:自定义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对象,您可以从中检索正文内容。
要在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());
}
}
}
如果您使用的是自定义标签与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>
谢谢,不知道这个类,它的工作原理。 – Kyle 2010-03-23 18:02:44
值得注意的是,JspFragment功能不强,因为它是有限的 - 它必须是无脚本的,BodyContent不以这种方式受到限制。 BodyContent实质上就像一个内部的JSP页面。 – Yoni 2013-11-27 12:40:14