【问题标题】:Spring MVC: Receive radio button valuesSpring MVC:接收单选按钮值
【发布时间】:2013-03-22 13:57:37
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java spring jakarta-ee spring-mvc


    【解决方案1】:

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

    【讨论】:

    • 我更新了我的问题,看看你现在能不能看到问题!谢谢
    • 非常感谢!这正是我所需要的。
    【解决方案2】:

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

    #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");  
    

    【讨论】:

    • 我更新了我的问题,看看你现在能不能看到问题!谢谢
    • 您可以使用 name="rd_n[]" 为每个组创建一个数组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    • 2014-08-24
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 2021-08-16
    相关资源
    最近更新 更多