我有一个带有输入框表的模板,每行代表一个模型对象。 我无法弄清楚在我的控制器中映射它的最佳方法是什么。
#{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个对象?
答案 0 :(得分: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) { ... }