2013-03-22 58 views
2

我需要在控制器上接收和未知数量的单选按钮值。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! 
    ) { 

      ... 

    } 

UPDATE:

生成的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

你可以使用@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)); 
    } 
} 
+0

我更新了我的问题,看看你可以看到现在的问题!谢谢 – renanlf 2013-03-22 14:23:55

+0

检查我的更新... – 2013-03-22 14:28:50

+0

非常感谢!这正是我需要的。 – asgs 2016-01-03 12:11:23

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"); 
+0

我更新了我的问题,看看你现在是否能看到问题!谢谢 – renanlf 2013-03-22 14:16:22

+0

您可以使用name =“rd_n []”为每个组创建一个阵列。 – 2013-03-22 14:31:16