2010-03-23 65 views

回答

10

这很复杂,因为有两种机制。

如果您正在扩展SimpleTagSupport,则会得到getJspBody()方法。它返回一个JspFragment,您可以invoke(Writer writer)将正文内容写入作者。

您应该使用SimpleTagSupport,除非您有特定的理由使用BodyTagSupport(就像传统标签支持) - 原因很简单。

如果您使用经典标签,那么您将扩展BodyTagSupport,从而获得对getBodyContent()方法的访问权限。这会为您提供一个BodyContent对象,您可以从中检索正文内容。

+0

谢谢,不知道这个类,它的工作原理。 – Kyle 2010-03-23 18:02:44

+1

值得注意的是,JspFragment功能不强,因为它是有限的 - 它必须是无脚本的,BodyContent不以这种方式受到限制。 BodyContent实质上就像一个内部的JSP页面。 – Yoni 2013-11-27 12:40:14

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

}

6

如果您使用的是自定义标签与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>