данных следующие фрагменты кода:Доступ к свойствам в шаблонах по имени
заводного:
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" %>
Есть ли способ получить доступ к val1 по KEYNAME в test.template?
Это:
${ binding[keyName] }
не работает (Нет такого свойства: key1 для класса: groovy.lang.Binding). Есть идеи? Может быть, имя карты, содержащей свойства, отличается?
Я знаю, что я мог бы просто написать:
${ key1 }
, но мне нужно, чтобы получить доступ к собственности key1 с помощью переменной KEYNAME.
Я прочитал код Groovy и нашел способ: используйте $ {delegate [keyName]}. Делегат - это частное поле Closeure, поэтому я думаю, что должно быть более элегантное решение моей проблемы. Все еще ищут ответ. – user3334236
Похоже, это добавляет дополнительный уровень косвенности. Для начала подумайте, что вам нужно будет добавить keyName: 'key1' на вашу карту привязки, но мне не удалось заставить шаблон работать, выполнив это ... – mikemil
'delegate. '$ KeyName" 'или' delegate [ keyName] 'путь вперед –