2014-02-14 21 views
2

我不知道要完美地构造我的问题,但我试图从HTML多行窗体中获取数据,我不想使用绑定对象和我不想在我的请求处理方法上有很多@RequestParam参数。我想表单提交返回一个int数组,但我得到以下错误HTTP Status 400 - Required int[] parameter 'department' is not present。我试着写形式以同样的方式人会做在PHP这样的:如何处理没有绑定对象的多行窗体在春天MVC

<form action="processForm" method="POST"> 
<select name="department[]"> 
    <option value="NONE">---SELECT---</option> 
    <c:forEach items="${departments}" var="department"> 
    <option value="${department.getId()}">${department.getName()}</option> 
    </c:forEach> 
</select> 
<select name="department[]"> 
    <option value="NONE">---SELECT---</option> 
    <c:forEach items="${departments}" var="department"> 
    <option value="${department.getId()}">${department.getName()}</option> 
    </c:forEach> 
</select> 
<select name="department[]"> 
    <option value="NONE">---SELECT---</option> 
    <c:forEach items="${departments}" var="department"> 
    <option value="${department.getId()}">${department.getName()}</option> 
    </c:forEach> 
</select> 
<select name="department[]"> 
    <option value="NONE">---SELECT---</option> 
    <c:forEach items="${departments}" var="department"> 
    <option value="${department.getId()}">${department.getName()}</option> 
    </c:forEach> 
</select> 
</form> 

我控制器请求映射方法有提前如下

@Request(value = "/form",nethod = RequestMethod.GET) 
public String renderForm(){ 
    return "form" 
} 

@Request(value = "processForm", method = RequestMethod.POST) 
public String processForm(@RequestParam("department") int [] department){ 
    for (int i=0;i<department.lenth;i++){ 
     System.out.println(department[i]); 
    } 
} 

感谢你。

+0

始终是固定的4所选择的形式? –

+0

没有我要添加JavaScript,以允许用户添加尽可能多的行,因为他们需要 – Piet

+0

如果你只是有一个或几个变量来使用getParameterValues,它更简单,它不能错误int []部门=请求。 getParameterValues(“部门”),记得从你的html中删除[]所以name =“department” –

回答

0

更改@RequestParam@RequestParam("department[]")

@Request(value = "processForm", method = RequestMethod.POST) 
public String processForm(@RequestParam("department[]") int [] department){ 
    for (int i=0;i<department.lenth;i++){ 
     System.out.println(department[i]); 
    } 
} 
+0

谢谢这个作品,以及解决方案@ ah-shianghan在评论中给了我 – Piet

+0

@Piet很高兴我能帮上忙。我在注释中注意到他的解决方案,但我在本地机器上设置了一个示例,并认为不妨发布。 –