Spring MVC:接收单选按钮值

时间:2013-03-22 13:57:38

标签: java spring java-ee spring-mvc

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

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

查看(使用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
...

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

2 个答案:

答案 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");