2013-03-05 42 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

你可以pst一個index.tpl的例子嗎?你的代碼應該可以工作,所以它可能更像是你在模板中調用它的一個問題。 – Rhysyngsun 2013-03-06 15:20:02

+0

感謝您的回覆!我添加了模板代碼。 – Soid 2013-03-08 02:02:18

回答

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 2013-03-08 20:45:39