我试图从反馈,但我不能得到任何关于如何发送多维int数组从表单到控制器的例子。
pic: http://oi58.tinypic.com/p1z10.jpg
控制器@RequestMapping(value = "/submitfeedback", method = RequestMethod.POST)
public String postsubmitfeedback(@ModelAttribute("answer") @RequestParam("email") String email,
@RequestParam("feedback_id") Integer feedback_id, @RequestParam(value="myanswer[]") int [] myanswer, Answer answer,
Locale locale) {
for(int i=0; i<myanswer.length;i++) {
System.out.println(myanswer[i]);
}
return "submitfeedback";
}
Jsp表单
<form:form commandName="feedback">
<c:forEach items="${questionList}" var="question">
<c:set var="counter" value="${counter + 1}"/>
<tr>
<td>${counter}</td>
<td>${question.question}</td>
<td><input type="radio" name="myanswer[${count}]" id="radio" value="1" /> 1</td>
<td><input type="radio" name="myanswer[${count}]" id="radio" value="2" /> 2</td>
<td><input type="radio" name="myanswer[${count}]" id="radio" value="3" /> 3</td>
<td><input type="radio" name="myanswer[${count}]" id="radio" value="4" /> 4</td>
<td><input type="radio" name="myanswer[${count}]" id="radio" value="5" /> 5</td>
</tr>
<c:set var="count" value="${count+1}"/>
</c:forEach>
</form:form>
首先,我强烈建议您将参数封装在对象中。
class FeedbackForm {
private String email;
private Integer feedbackId;
private Integer answer;
/** Getters and setters. */
}
html表单输入的名称应该与字段名称匹配。
其次,你有一个单选按钮控件,我怀疑你最终会得到一个整数数组,因为你只能一直选择一个单选按钮。在上面的bean中,我将其更正为一个答案。单选按钮有点奇怪,因为它们在表单中有多个输入。您可能应该有这样的内容:
<input type="radio" name="answer" value="1" onClick="changeMyHiddenField()" />1
<input type="radio" name="answer" value="2" onClick="changeMyHiddenField()" />2
<input type="radio" name="answer" value="3" onClick="changeMyHiddenField()" />3
<form {...}> <input id="myHiddenField" type="hidden" name="answer" /> </form>
第三,您没有对客户端的输入进行验证。您应该利用Spring的bean验证。
@Min(value = 1, message = "Min is 1.")
@Max(value = 5, message = "Max is 5.")
private Integer answer;
最后,你的方法签名应该像这样:
public String postFeedback(@ModelAttribute @Valid FeedbackForm form, HttpServletRequest request, Locale locale);