给定以下代码:
groovy:
binding = [key1: "val1"]
def f = new File('test.template')
engine = new GStringTemplateEngine()
template = engine.createTemplate(f).make(binding)
println template.toString()
测试模板:
<% keyName = "key1" %>
有没有办法通过test.template中的keyName访问val1?
此:
${ binding[keyName] }
不起作用(没有这样的属性:类的key1:groovy.lang.Binding)。有什么想法吗?也许包含属性的地图的名称不同?
我知道我可以写:
${ key1 }
但我需要使用变量keyName访问属性key1。
不确定这是否更好,但我得到了以下工作(有点)
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] %>
但这依赖于一个子映射,该子映射包含您要查找的值。
我可以看到这样的场景,在绑定中,您传递一个要处理或显示的字段列表(而不是提前知道它们),因此您必须从一个已知变量中获取字段名称,然后可能通过子映射处理其他字段。