2010-03-23 4 views

risposta

10

È complicato perché ci sono due meccanismi.

Se si sta estendendo SimpleTagSupport, si ottiene il metodo getJspBody(). Restituisce un JspFragment che è possibile invoke(Writer writer) per avere il contenuto del corpo scritto nello scrittore.

È necessario utilizzare SimpleTagSupport a meno che non si abbia un motivo specifico per utilizzare BodyTagSupport (come il supporto dei tag legacy) così com'è - ben più semplice.

Se si sono utilizzando tag classici, si estende BodyTagSupport e quindi si ottiene l'accesso a un metodo getBodyContent(). Questo ti porta un oggetto BodyContent da cui puoi recuperare il contenuto del corpo.

+0

Grazie, non sapeva di quella classe, funziona. – Kyle

+1

Vale la pena notare che un JspFragment è meno potente perché è limitato - deve essere privo di script, dove come BodyContent non è limitato in questo modo. Un BodyContent è essenzialmente come una pagina JSP interna. – Yoni

5

di espandere Brabster's answer, ho usato SimpleTagSupport.getJspBody() a scrivere il JspFragment ad un interna StringWriter per l'ispezione e la manipolazione:

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

se si utilizza un tag personalizzato con jsp approccio 2.0 , si può fare come:

make-h1.tag

<%@tag description="Make me H1 " pageEncoding="UTF-8"%> 
<h1><jsp:doBody/></h1> 

Usa in JSP come:

<%@ taglib prefix="t" tagdir="/WEB-INF/tags"%> 
<t:make-h1>An important head line </t:make-h1>