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