2012-01-22 93 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) { ... } 
相關問題