【发布时间】:2013-04-03 18:26:17
【问题描述】:
我遇到了一个模型属性的问题,它在表单验证后似乎“消失”了:
public class QuestionController {
//...
@RequestMapping(value="/get", method=RequestMethod.GET)
public String prepareVoterBean(Model model, @RequestParam String voterID) {
...
VoterBean questions = service.getQuestionBean(voterID);
model.addAttribute("questions", questions);
return "questionPage";
}
@RequestMapping(method=RequestMethod.POST)
public String processSubmit(@Valid VoterBean questions, BindingResult result) {
if (result.hasErrors()) {
logger.info("QuestionController encountered form errors ");
return "questionPage";
}
return "redirect:/ballot/get";
}
以下是 questionPage.jsp,其中 BindingResult 和 bean 名称(“问题”)的普通目标对象都没有发生:
<form:form modelAttribute="questions" method="post">
<fieldset>
<legend>Security Questions</legend>
<p>
<form:label for="birthDate" path="birthDate" cssErrorClass="error"> <fmt:message key="questions.birthDate"/>: </form:label></br>
<form:input path="birthDate" /><form:errors path="birthDate"/>
</p>
//...
questionPage 使用 HTTP get 请求渲染得很好,但是当我提交带有验证错误的表单时,从而触发 processSubmit() 返回 questionPage,我有 BindingResult 错误。我对自己做错了什么感到非常困惑,因为我的问题 bean 在第一次返回时必须可供 questionPage 使用,但是在带有验证错误的 HTTP POST 请求之后页面突然找不到 bean .非常感谢您的帮助。谢谢。
【问题讨论】:
-
questions在您返回questionPage后不再存在于模型中。您必须在if (result.hasErrors())块中再次添加它。模型属性与请求一样长。
标签: java spring jsp spring-mvc