我需要在控制器上接收和未知数量的单选按钮值。
单选按钮是生成的,可能会有所不同......所以我需要一种方法来接收用户发送的数量。我怎样才能做到这一点?
查看(使用Velocity):
...
#foreach( $f in $model.fields )
<input type="radio" name="rd_$f.name" value="S" checked="checked"/> S
<input type="radio" name="rd_$f.name" value="C" /> C
#end
...
这将生成X个单选按钮组... 我需要在我的控制器上接收它:
@RequestMapping(value = "/{e}/{id1}/{id2}", method = RequestMethod.POST)
public ModelAndView salvar(@PathVariable(value = "e") String e,
@PathVariable(value = "id1") Long id1,
@PathVariable(value = "id2") Long id2,
//MY RADIO BUTTONS ARRAY HERE!
) {
...
}
更新
生成的html类似于:
...
<input type="radio" name="rd_1" value="S" checked="checked"/> S
<input type="radio" name="rd_1" value="C" /> C
...
<input type="radio" name="rd_2" value="S" checked="checked"/> S
<input type="radio" name="rd_2" value="C" /> C
...
<input type="radio" name="rd_n" value="S" checked="checked"/> S
<input type="radio" name="rd_n" value="C" /> C
...
所以我不能只是绑定到控制器上的[],对吗?
答案 0 :(得分:4)
您可以使用@RequestParam(value="radio_name") String[] radioCheckedValues
作为弹簧控制器中的另一个属性进行绑定。
修改强>
服务器可以知道来自客户端的内容的唯一方法是使用该名称。您可以使用request.getParameterNames
。
伪代码......
List<String> values = new ArrayList();
Enumeration<String> enumeration = req.getParameterNames();
while (enumeration.hasMoreElements()) {
String parameterName = (String) enumeration.nextElement();
if(parameterName.startsWith("rd_")) {
values.add(req.getParameter(parameterName));
}
}
答案 1 :(得分:1)
使用名称中的[]
将每个radiobox分组到一个数组中:
#foreach( $f in $model.fields )
<input type="radio" name="radio[]" value="S" checked="checked"/> S
<input type="radio" name="radio[]" value="C" /> C
#end
然后在控制器中读取此数组。
编辑:
要检索值,请使用(在每个数组上循环):
String[] params = request.getParameterValues("rd_n");