2013-03-05 6 views
5

मैं GStringTemplateEngine के लिए टेम्पलेट्स में उपयोग किए जाने वाले फ़ंक्शन को परिभाषित करना चाहता हूं। मैं उस तरह से बाध्यकारी का उपयोग करने की कोशिश की:GStringTemplateEngine टेम्पलेट के अंदर फ़ंक्शन बाध्यकारी को परिभाषित करने के लिए कैसे करें?

import groovy.text.GStringTemplateEngine 

def prettify = { 
return "***${it}***" 
} 
def var = "test" 

def f = new File('index.tpl') 
engine = new GStringTemplateEngine() 
tpl = engine.createTemplate(f).make([ 
    "var": var, 
    "prettify": prettify 
]) 
print tpl.toString() 

index.tpl:

Var: ${var} 
Prettified: <% print prettify(var) %> 

यह एक अपवाद फेंकता है:

Caught: groovy.lang.MissingMethodException: No signature of method: groovy.tmp.templates.GStringTemplateScript1.prettify() is applicable for argument types: (java.lang.String) values: [test] 
Possible solutions: notify(), printf(java.lang.String, [Ljava.lang.Object;), printf(java.lang.String, java.lang.Object), printf(java.lang.String, [Ljava.lang.Object;), identity(groovy.lang.Closure), printf(java.lang.String, java.lang.Object) 

लेकिन यह काम नहीं कर रहा। ऐसा लगता है कि टेम्पलेट इंजन बूलिंग्स में बूलिंग्स में बंद रहता है। मैं यह कैसे करुं? या शायद मुझे एक और टेम्पलेट इंजन चुनना चाहिए?

+0

क्या आप index.tpl का उदाहरण दे सकते हैं? आपका कोड काम करना चाहिए, इसलिए यह संभवतः एक मुद्दा है कि आप इसे टेम्पलेट में कैसे आविष्कार कर रहे हैं। – Rhysyngsun

+0

आपकी प्रतिक्रिया के लिए धन्यवाद! मैंने टेम्पलेट कोड जोड़ा। – Soid

उत्तर

6

में अपने index.tpl बदलना:

Var: ${var} 
Prettified: <% print prettify.call(var) %> 

जिसके परिणामस्वरूप:

***test***Var: test 
Prettified: 

आप अपने index.tpl को बदलते हैं:

Var: ${var} 
Prettified: ${prettify.call(var)} 

उत्पादन होता है:

Var: test 
Prettified: ***test*** 
+0

पूरी तरह से काम करता है, बहुत बहुत धन्यवाद! – Soid

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