我正在尝试在Grails应用中减少一些重复的GSP代码。以下代码按预期工作:
<g:textField name="recordValues.0.name" value="${recordValues?.get(0)?.name}"/>
<g:textField name="recordValues.0.age" value="${recordValues?.get(0)?.age}"/>
[edit] recordValues.0.age
实际上是一个Map而不是类属性,正如我最初所说的那样。
但是,当我尝试使用 list 枚举动态设置一堆这些时,不会评估value属性:
<g:each in="${fields}" var="prop">
<g:textField name="recordValues.0.${prop}" value="${recordValues?.get(0)?.prop}"/>
</g:each>
似乎value属性正在查找名为“prop”的 property Map键,并且不将其作为变量进行评估。我曾尝试recordValues?.get(0)[prop]
有?
,但没有编译。
我是否可以使用变量作为参数或更简单的解决方案调用一些动态方法?
答案 0 :(得分:1)
最后自己排序。感谢代码空间让我再次检查代码并注意到它是我试图引用的Map,而不是对象属性。我使用枚举的事实混淆了问题,因为使用常规map.get(var)
不起作用,我需要map.get(var.name())
代替(也许我会将其编码为枚举内的字符串字段以避免这种情况)。
以下是解决方案:
<g:each in="${fields}" var="prop">
<g:textField name="recordValues.0.${prop}" value="${recordValues?.get(0)?.get(prop.name())}"/>
</g:each>