2010-11-09 22 views
24

का उपयोग कैसे करें प्ले फ्रेमवर्क के साथ कस्टम टैग बनाने के दो तरीके हैं।क्या कोई बता सकता है कि फास्टटैग

  1. एक ग्रूवी टेम्पलेट एक वर्ग FastTags

नवीनतम दस्तावेज नहीं है का विस्तार होने से शुद्ध जावा में

  • सीधे एप्लिकेशन/देखें/टैग में परिभाषित करके।

  • उत्तर

    23

    तो, JavaExtensions JavaExtensions क्लास को विस्तारित करने के तरीके के समान काम करता है, फास्टटैग बनाने के लिए आपको फास्टटैग को विस्तारित करने वाली कक्षा बनाने की आवश्यकता होती है। टैग के रूप में निष्पादित करने के लिए प्रत्येक विधि को निम्न विधि संरचना के अनुरूप होना आवश्यक है।

    public static void _tagName(Map<?, ?> args, Closure body, PrintWriter out, ExecutableTemplate template, int fromLine) 
    

    नोट टैग के नाम से पहले अंडरस्कोर।

    एक वास्तविक टैग बनाने के तरीके को समझने के लिए, फास्टटैग के लिए स्रोत कोड को देखने का सबसे आसान तरीका है, और एक कार्रवाई में देखें।

    यहां गिट हब से सीधे स्रोत है। https://github.com/playframework/play/blob/master/framework/src/play/templates/FastTags.java

    नीचे कुछ कॉपी किए गए हैं, ताकि मैं समझा सकूं कि यह कैसे काम करता है।

    public static void _verbatim(Map<?, ?> args, Closure body, PrintWriter out, ExecutableTemplate template, int fromLine) { 
        out.println(JavaExtensions.toString(body)); 
    } 
    

    तो, यह पहली विधि शब्दशः टैग है, और बस JavaExtensions पर toString प्रणाली को बुलाती है, और टैग के निकाय में गुजरता है। टैग का शरीर खुले और करीबी टैग के बीच कुछ भी होगा। तो

    <verbatim>My verbatim</verbatim> 
    

    शरीर मान होगा

    My verbatim 
    

    दूसरे उदाहरण, थोड़ा और अधिक जटिल है। यह एक टैग है जो फ़ंक्शन पर पैरेंट टैग पर निर्भर करता है।

    public static void _option(Map<?, ?> args, Closure body, PrintWriter out, ExecutableTemplate template, int fromLine) { 
        Object value = args.get("arg"); 
        Object selectedValue = TagContext.parent("select").data.get("selected"); 
        boolean selected = selectedValue != null && value != null && selectedValue.equals(value); 
        out.print("<option value=\"" + (value == null ? "" : value) + "\" " + (selected ? "selected=\"selected\"" : "") + "" + serialize(args, "selected", "value") + ">"); 
        out.println(JavaExtensions.toString(body)); 
        out.print("</option>"); 
    } 
    

    इस कोड को एक HTML विकल्प टैग outputting द्वारा काम करता है, और चयनित मूल्य निर्धारित करता है, की जांच करने मूल्य पैरेंट टैग से चयन किया जाता है द्वारा। पहली 3 लाइनें डेटा प्राप्त करती हैं, और आउटपुट के लिए तैयार डेटा सेट अप करती हैं। फिर, अंतिम 3 लाइनें टैग के परिणाम को आउटपुट करती हैं।

    जटिलता की अलग-अलग डिग्री के साथ मैंने जो स्रोत कोड लिंक किया है, उससे कई और उदाहरण हैं, लेकिन उम्मीद है कि यह आपके लिए एक अच्छा प्रारंभिक बिंदु होगा।

    यह सुनिश्चित करने के लिए कि आपके टैग परियोजनाओं के बीच या कोर प्ले टैग के साथ संघर्ष नहीं करते हैं, आप कक्षा स्तर एनोटेशन @ FastTags.Namespace का उपयोग करके नामस्थान सेट अप कर सकते हैं।

    तो, एक नमस्ते टैग के लिए, my.tags के नाम स्थान में, आप क्या करेंगे निम्नलिखित

    @FastTags.Namespace("my.tags") 
    public class MyFastTag extends FastTags { 
        public static void _hello (Map<?, ?> args, Closure body, PrintWriter out, ExecutableTemplate template, int fromLine) { 
         ... 
        } 
    } 
    

    और फिर अपने टेम्पलेट्स में, आप

    #{my.tags.hello/} 
    
    +3

    के रूप में हैलो टैग संदर्भ हैं बहुत अच्छा, इसके अलावा आप वर्ग-एनोटेशन @ फास्टटैग को समझा सकते हैं।नेमस्पेस ("मायटैग"), जो नाम-टकराव को रोकने के लिए एक अच्छा अभ्यास होगा। – niels

    +1

    अच्छा बिंदु, मैं अब इसे जोड़ दूंगा। – Codemwnci

    +0

    धन्यवाद! क्या आप एक टैग से त्रुटियों को बढ़ाने के लिए विवरण दे सकते हैं? एक इनपुट पैरामीटर गुम है ... मैं एक त्रुटि/अपवाद कैसे उत्पन्न करूं? –

    संबंधित मुद्दे

     संबंधित मुद्दे