【发布时间】:2011-04-29 22:47:59
【问题描述】:
我试图在我的 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 映射键,并且没有将其评估为变量。我试过recordValues?.get(0)[prop] 和? 之间没有,但它没有编译。
是否有一些动态方法可以使用变量作为参数或更简单的解决方案来调用?
【问题讨论】:
-
为什么要引用列表中的第一项。你的重复GSP代码是不是迭代错误造成的?我会使用
来遍历您的 recordValues 并声明有问题的字段,如您的第一个示例所示。 -
它仍处于开发的早期阶段,“列表中的第一项”在此迭代中被硬编码,但我们预计最终每页会有多个记录值。实际的字段名称未在域对象中编码 - 有一个通用字段实体,GSP 实际上是设置每个字段实例的名称。直到数据被保存,我才能迭代它们。所以我目前的重构是从枚举中指定字段名称(不是我在 Q 中所说的列表)。我没有编写第一个版本,所以我仍在尝试了解所有代码(和 Grails)