我有三个域类: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等。
答案 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 ] ) }