2

我需要在我的控制器上接收未知数量的单选按钮值。

单选按钮已生成并且可能会有所不同......所以我需要一种方法来接收用户发送的数量。我怎样才能做到这一点?

查看(使用速度):

...
#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
...

所以我不能只绑定到控制器上的 [] ,对吗?

4

2 回答 2

4

@RequestParam(value="radio_name") String[] radioCheckedValues您可以在 spring 控制器中使用作为另一个属性进行绑定。

编辑 服务器可以知道来自客户端的唯一方法是使用名称。您可以使用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));
    }
}
于 2013-03-22T14:01:49.833 回答
1

在名称中使用[]将每个单选框分组到一个数组中:

#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");  
于 2013-03-22T14:05:55.240 回答