2012-01-22 7 views
0

各行がモデルオブジェクトを表すため、テンプレートの入力ボックスがあります。 コントローラーでこれをマップする最良の方法は何か分かりません。複数のオブジェクトをテンプレートからコントローラにマップする方法

#{form id:'targetsForm', method:'POST', action:@createTargets()} 
     <table id="targetsTable"> 
     <tr> 
     <th>Name</th> 
     <th>January</th> 
     <th>February</th> 
     <th>March</th> 
     </tr> 
     <tbody> 
     <tr> 
     <td class="center" id="object2">Object1</td> 
     <td class="center"><input id="01-jan" type="number" name="01-jan" size="20" value="" class="target-input" /></td> 
     <td class="center"><input id="01-feb" type="number" name="01-feb" size="20" value="" class="target-input" /></td> 
     <td class="center"><input id="01-mar" type="number" name="01-mar" size="20" value="" class="target-input" /></td> 
     </tr> 
     <tr> 
     <td class="center" id="object2">Object2</td> 
     <td class="center"><input id="02-jan" type="number" name="02-jan" size="20" value="" class="target-input" /></td> 
     <td class="center"><input id="02-feb" type="number" name="02-feb" size="20" value="" class="target-input" /></td> 
     <td class="center"><input id="02-mar" type="number" name="02-mar" size="20" value="" class="target-input" /></td> 
     </tr> 
     </tbody> 
     </table> 
    #{/form} 

オブジェクト1とオブジェクト2をルートとコントローラにマップするには、n個のオブジェクトがフォームに存在する可能性があります。テンプレートで

答えて

3

、あなたはこのような何かを行うことができます。その後、

#{form @createTargets()} 

    #{field 'january[0]'} 
     <input type="number" name="${field.name}" value=""/> 
    #{/field} 
    #{field 'february[0]'} 
     <input type="number" name="${field.name}" value=""/> 
    #{/field} 
    #{field 'march[0]'} 
     <input type="number" name="${field.name}" value=""/> 
    #{/field} 

    #{field 'january[1]'} 
     <input type="number" name="${field.name}" value=""/> 
    #{/field} 
    #{field 'february[1]'} 
     <input type="number" name="${field.name}" value=""/> 
    #{/field} 
    #{field 'march[1]'} 
     <input type="number" name="${field.name}" value=""/> 
    #{/field} 
#{/form} 

そして、あなたのコントローラでは、あなたのcreateTargets方法は、次のようになります。

public static void save(List<Integer> january, List<Integer> february, List<Integer> march) { ... } 

あなたが行う必要はありません。テンプレートからコントローラにフィールドをマップするための特別なもの。 Playでは、名前(例:1月、2月、3月)がコントローラーのパラメーターの名前にマップされます。代わりに、アクションメソッドにパラメータとして個々ヶ月を持っていることの

は、あなたがこのようなオブジェクトを作成できます。

public class Target { 
    private int january; 
    private int february; 
    private int march; 

    ... 
} 

をそしてテンプレートは次のようになります。

その後
#{form @createTargets()} 

    #{field 'targets[0].january'} 
     <input type="number" name="${field.name}" value=""/> 
    #{/field} 
    #{field 'targets[0].february'} 
     <input type="number" name="${field.name}" value=""/> 
    #{/field} 
    #{field 'targets[0].march'} 
     <input type="number" name="${field.name}" value=""/> 
    #{/field} 

    #{field 'targets[1].january'} 
     <input type="number" name="${field.name}" value=""/> 
    #{/field} 
    #{field 'targets[1].february'} 
     <input type="number" name="${field.name}" value=""/> 
    #{/field} 
    #{field 'targets[1].march'} 
     <input type="number" name="${field.name}" value=""/> 
    #{/field} 
#{/form} 

コントローラこれは単純に次のようになります:

public static void save(List<Target> targets) { ... } 
関連する問題