【问题标题】:How to define function binding inside GStringTemplateEngine template?如何在 GStringTemplateEngine 模板中定义函数绑定?
【发布时间】:2013-02-19 08:51:01
【问题描述】:

我想为 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)

但它不起作用。看起来模板引擎将绑定中的闭包转换为布尔值。我该怎么做?或者我应该选择另一个模板引擎?

【问题讨论】:

  • 你能提供一个 index.tpl 的例子吗?您的代码应该可以工作,因此这可能更多是您如何在模板中调用它的问题。
  • 感谢您的回复!我添加了模板代码。

标签: templates groovy closures


【解决方案1】:

将您的 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***

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 2018-01-09
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    相关资源
    最近更新 更多