2012-03-18 5 views
0

私は3つのドメインクラスがありますようMaterialsOfConcern、材質やMaterialStatusセットアップ:フォームパラメータをドメインオブジェクトのリストにバインドするGrailsには、標準的な方法がありますか?

class MaterialsOfConcern { 
    Material material 
    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

実際にはもっと良い選択肢かどうかはわかりません。しかし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 ]) } 
関連する問題