Vorrei definire una funzione da utilizzare nei modelli per GStringTemplateEngine. Ho cercato di usare legame così:Come definire il binding delle funzioni all'interno del modello 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) %>
viene generata un'eccezione:
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)
Ma non sta funzionando. Sembra che il motore di template proietti le chiusure in binding a boolean. Come lo faccio? O probabilmente dovrei scegliere un altro motore di template?
Puoi prima vedere un esempio di index.tpl? Il tuo codice dovrebbe funzionare, quindi è probabilmente più un problema di come lo stai invocando nel modello. – Rhysyngsun
Grazie per la tua risposta! Ho aggiunto il codice del modello. – Soid