按名称访问模板中的属性

时间:2014-02-20 20:03:05

标签: templates groovy gstring

给出以下代码:

常规:

binding = [key1: "val1"]
def f = new File('test.template')
engine = new GStringTemplateEngine()
template = engine.createTemplate(f).make(binding)
println template.toString()

test.template:

<% keyName = "key1" %>

有没有办法通过test.template中的keyName访问val1?

此:

${ binding[keyName] }

不起作用(没有这样的属性:类的key1:groovy.lang.Binding)。有任何想法吗?也许拿着属性的地图名称不同?

我知道我可以写:

${ key1 }

但我需要使用变量keyName访问属性key1。

1 个答案:

答案 0 :(得分:0)

不确定这是否更好,但我得到以下工作(有点)

Map binding = [ keyName: 'key1', key1: "val1", m: [key1:'val100', key2:'val2']]
def f = new File('test.template')
def engine = new groovy.text.GStringTemplateEngine()
def template = engine.createTemplate(f).make(binding)
println template.toString()

使用以下模板:

$keyName
$key1
<%= m[keyName] %>

但这依赖于一个包含您正在寻找的值的子图。

我可以看到在绑定中你传递一个你想要处理或显示的字段列表的场景(而不是提前知道它们),所以你必须从一个众所周知的变量获取字段名称,然后可能通过子图处理其他人。