grails - Grails 中是否有首选/标准方式将表单参数绑定(bind)到域对象列表?

我有三个域类:MaterialsOfConcern、Material 和 MaterialStatus 设置如下:

class MaterialsOfConcern {
     Material material
     MaterialStatus materialStatus
}

我想创建一个表单,向用户展示系统中已存在的 Material 的静态列表。对于列出的每个 Material ,他们必须选择相应的 Material 状态。对此有标准方法吗?

我在gsp中考虑了以下内容:
<g:each var="material" in="${materials}">
    <g:select name="materialStatus[${material.id}].id" from="${MaterialStatus.list()}" value="?" class="many-to-one"/>
</g:each>

然后在 Controller 中手动解析 params 对象以获取我需要的信息。但我认为必须有更好、更标准化的方式,在 Map 或 Command 对象等上使用 bindData。

最佳答案

我不确定它是否真的是一个更好的选择。但是 Grails 确实提供了一个功能,可以将具有相同名称的多个表单字段分组为一个列表。

使用您的示例,您可以简单地将 Material 状态列表传递给您的 Controller ,然后根据它们的列表顺序解决它们。

<g:each var="material" in="${materials}">  
   <g:select name="materialStatus" from="${MaterialStatus.list()}"/>
</g:each>

然后,您可以使用 params.list 机制获取 Material 状态列表。
def statuses = params.list( 'materialStatus' )
materials.eachWithIndex{ material, index -> new MaterialOfConcern( material: material, materialStatus: statuses[ index ] )  }

https://stackoverflow.com/questions/9761844/

相关文章:

grails - 哪个框架用于访问 couchDB 的门户网站?

hibernate - 复合键另存为null

grails - Grails 1.3.7如何在不进行任何缓冲的情况下直接写入输出流

jquery - 克隆一个动态创建的选择列表

grails - Grails的 Controller

grails - Grails-多个联接在 ListView 中显示冗余数据

grails - 从环境变量将grails配置外部化为多个属性文件

grails - 将grails选择值传递给actionSubmit to Javascript方法

unit-testing - 如何编写Grails delete()方法的测试

grails - 如何从 grails 查询中访问属性