2012-03-18 20 views
0

我有三個域類:MaterialsOfConcern,材料和MaterialStatus設置爲這樣:Grails中是否有一種首選/標準方式將表單參數綁定到域對象列表?

class MaterialsOfConcern { 
    Material material 
    MaterialStatus materialStatus 
} 

我想創造一個爲用戶呈現與已經存在於系統中的材料的靜態列表的形式。對於列出的每種材料,他們必須選擇相應的MaterialStatus。有沒有一個標準的方法呢?在控制器

<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

我不確定它是否是更好的選擇。但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 ]) } 
相關問題