Grails中是否有一种首选/标准方法将表单参数绑定到域对象列表?

时间:2012-03-18 20:10:34

标签: grails

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

class MaterialsOfConcern {
     Material material
     MaterialStatus materialStatus
}

我想创建一个表单,向用户显示系统中已存在的静态材料列表。对于列出的每种材料,他们必须选择相应的MaterialStatus。有没有标准方法呢?

我在gsp中想到了以下内容:

<g:each var="material" in="${materials}">
    <g:select name="materialStatus[${material.id}].id" from="${MaterialStatus.list()}" value="?" class="many-to-one"/>
</g:each>

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

1 个答案:

答案 0 :(得分:1)

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

使用您的示例,您只需将材料状态列表传递给控制器​​,然后根据其列表顺序解决它们。

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

然后,您可以使用params.list机制获取材料状态列表。

def statuses = params.list( 'materialStatus' )
materials.eachWithIndex{ material, index -> new MaterialOfConcern( material: material, materialStatus: statuses[ index ] )  }