2013-03-05 10 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を変更する:あなたがにあなたのindex.tplを変更した場合

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

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

出力は次のとおりです。

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

することになります

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

完璧に動作します、ありがとう! – Soid

関連する問題