1

我正在尝试创建一个注册表单。在这种形式中,有一些字段(用户名、密码等)和一个下拉列表框。我的问题是这个列表框。我设法从服务器成功检索将添加到列表框中的所有项目,我想知道把它放在这个表单中。

更具体地说,我有一个名为 lista 的列表,其中包含我要在列表框中添加的项目。

JSP:

<c:url var="attinto" value="/reg" />
<form:form modelAttribute="attribute" method="POST" action="${attinto}">
<table>
    .
            .

    <tr>
        <td><form:label path="researchareas">Research area:</form:label></td>
        <td>    
          <select multiple="multiple">   
            <c:forEach items="${researchareas}" var="researcharea">     
              <option value="${researcharea}">  ${researcharea} </option>                   
            </c:forEach>
          </select>    
        </td> 
    </tr>

控制器:

    @RequestMapping(value = "/reg", method = RequestMethod.GET)
    public String getform(Model model) {

        getAll(model);
        model.addAttribute("attribute", new Reg());

        return "reg";
    }

在这一点上我不得不提到 getAll(model) 是一个类似于以下的 void 方法:

      model.addAttribute("researchareas",lista);

然后我创建一个 POST 方法来发送这些数据。

问题:如何将列表中的数据添加到表单中(到列表框中)?如何取回用户将选择的值?

4

2 回答 2

2

首先,form:select像这样使用:

<form:select path="researchareas" items="${researchareas}" multiple="true" />

然后 Spring 可以自动绑定 Registration 对象中的相应属性:

@RequestMapping(value = "/registration", method = RequestMethod.POST)
public String getRegistrationForm( //
    @ModelAttribute("registrationAttribute") Registration registration, //
    BindingResult result, Model model) {
  ...
  return ...
}

假设注册类具有以下内容:

public class Registration {
  String username;
  String password;
  List<String> researchareas;

  ... corresponding getters and setters here
}

虽然我将属性命名为与类相同,否则您必须在方法参数注释中指定显式名称。

于 2012-05-14T18:03:16.963 回答
2

请在 jsp 中的表单中指定post方法,并在控制器中指定method=RequestMethod.POST

还有一件事。

在您的注册类中,不应该将列表作为研究领域的数据类型。尝试将数据类型指定为String[]

希望这对你有用。干杯。

于 2012-05-15T09:43:40.093 回答