![](/img/trans.png)
[英]Spring MVC Neither BindingResult nor plain target object for bean name
[英]Spring MVC (Neither BindingResult nor plain target object for bean name) after Form Validation error
表单验证后,模型属性似乎“消失”了,我遇到了一个问题:
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>
//...
通过HTTP get请求可以很好地呈现问题页面,但是当我提交表单权重验证错误,从而触发processSubmit()返回问题页面时,我遇到了BindingResult错误。 我对自己做错的事情感到非常困惑,因为我怀疑第一次返回bean时必须已将bean提供给questionPage,但随后页面突然在经过HTTP POST请求并出现验证错误后无法找到bean 。 非常感谢您的帮助。 谢谢。
如果想让bean自动神奇地返回地图,则需要通过注释method参数来告诉Spring使用地图中的bean作为绑定目标:
@RequestMapping(method=RequestMethod.POST)
public String processSubmit(@Valid @ModelAttribute("questions") VoterBean questions, BindingResult result) {
if (result.hasErrors()) {
logger.info("QuestionController encountered form errors ");
return "questionPage";
}
return "redirect:/ballot/get";
}
我遇到了完全相同的问题,然后添加:@ModelAttribute(“ account”)我的JSP中的帐户是:
<sf:form method="post" action="${pageContext.request.contextPath}/register" commandName="account">
修复了验证失败时错误消息的问题。 现在,如果验证失败,则返回原始表单页面,并查看验证错误消息。 谢谢您对Alfe的帮助。
如果有兴趣,这是我的控制器:
@RequestMapping("/createaccount")
public String createAccount(Model model) {
model.addAttribute("account", new Identity());
return "createaccount";
}
@RequestMapping(value="/register", method=RequestMethod.POST)
public String doRegister(Model model, @Valid @ModelAttribute("account") Identity account, BindingResult result) {
if(result.hasErrors()) {
System.out.println("failed");
return "createaccount";
}
//offersService.create(offer);
System.out.println("success");
return "accountSuccess";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.