2010-03-23 19 views

उत्तर

10

यह जटिल है क्योंकि दो तंत्र हैं।

यदि आप SimpleTagSupport को विस्तारित कर रहे हैं, तो आपको getJspBody() विधि मिलती है। यह एक जेएसपीफ्रैगमेंट देता है कि आप invoke(Writer writer) लेखक को लिखित सामग्री को लिखने के लिए कर सकते हैं।

आपको SimpleTagSupport का उपयोग करना चाहिए जब तक कि आपके पास BodyTagSupport (जैसे विरासत टैग समर्थन) का उपयोग करने का कोई विशिष्ट कारण नहीं है - यह आसान है।

यदि आप क्लासिक टैग का उपयोग कर हैं, तो आप BodyTagSupport का विस्तार करते हैं और इसलिए getBodyContent() विधि तक पहुंच प्राप्त करें। यह आपको बॉडीकंटेंट ऑब्जेक्ट प्राप्त करता है कि आप शरीर की सामग्री को पुनर्प्राप्त कर सकते हैं।

+0

धन्यवाद, उस वर्ग के बारे में पता नहीं था, यह काम करता है। – Kyle

+1

यह ध्यान देने योग्य है कि एक जेएसपीफ्रैगमेंट कम शक्तिशाली है क्योंकि यह सीमित है - यह स्क्रिप्ट रहित होना चाहिए, जहां बॉडीकंटेंट इस तरह से सीमित नहीं है। एक बॉडीकंटेंट एक आंतरिक जेएसपी पेज की तरह संक्षेप में है। – Yoni

5

Brabster's answer पर विस्तार करने के लिए, मैं SimpleTagSupport.getJspBody() का उपयोग किया है निरीक्षण और हेरफेर के लिए एक आंतरिक StringWriter को JspFragment लिखने के लिए:

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> 
संबंधित मुद्दे