[英]Spring-mvc error: Neither BindingResult nor plain target object for bean name 'userBean' available as request attribute
[英]Spring 3 MVC:Neither BindingResult nor plain target object for bean name available as request attribute
我是Spring 3 MVC的新手,正在尝试一个简单的验证示例。 下面是控制器类:
@Controller
public class ValidationController {
@RequestMapping(value="/input")
public String displayForm(ModelMap model){
model.addAttribute("empl",new Employee());
return "input";
}
@RequestMapping(value="/validate", method = RequestMethod.POST)
public String validateForm(@Valid Employee empl, BindingResult result, ModelMap m){
if(result.hasErrors()){
System.out.println("Validation Failed!!!");
return "input";
}else{
System.out.println("Validation Succeeded!!!");
return "done";
}
}
}
Employee.java
@Size(min=2,max=30)
private String name;
@NotEmpty @Email
private String email;
@NotNull @Min(18) @Max(35)
private Integer age;
@Size(min=10)
private String phone;
// Getters and Setters
以下是input.jsp文件:
<form:form method="post" commandName="empl" action="validate">
<table>
<tr>
<td>
<label for="nameInput">Name:</label>
</td>
<td>
<form:input path="name" id="nameInput"/>
<form:errors path="name" cssClass="error"></form:errors>
</td>
</tr>
<tr>
<td>
<label for="ageInput">Age:</label>
</td>
<td>
<form:input path="age" id="ageInput"/>
<form:errors path="age" cssClass="error"></form:errors>
</td>
</tr>
<tr>
<td>
<label for="phoneInput">Phone:</label>
</td>
<td>
<form:input path="phone" id="phoneInput"/>
<form:errors path="phone" cssClass="error"></form:errors>
</td>
</tr>
<tr>
<td>
<label for="emailInput">Email:</label>
</td>
<td>
<form:input path="email" id="emailInput"/>
<form:errors path="email" cssClass="error"></form:errors>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="Submit">
</td>
</tr>
</table>
</form:form>
问题:
单击input.jsp`文件的submit button of the
时,出现以下异常:
org.apache.jasper.JasperException: java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'empl' available as request attribute
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:502)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:424)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:262)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1180)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:950)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
为了解决这个问题,我更改了验证方法,如下所示:
@RequestMapping(value="/validate", method = RequestMethod.POST)
public String validateForm(@Valid Employee empl, BindingResult result, ModelMap m){
if(result.hasErrors()){
System.out.println("Validation Failed!!!");
m.addAttribute("empl",new Employee());
return "input";
}else{
System.out.println("Validation Succeeded!!!");
return "done";
}
}
现在,错误消息不再显示。
请帮助我解决此问题,以使验证错误消息显示在input.jsp
屏幕中。
您需要在@Valid
之前添加@ModelAttribute("empl")
,以使Spring MVC能够知道它应该使用commandName="empl"
形式的输入来填充模型对象。
您的控制器方法应如下所示
public String validateForm(@ModelAttribute("empl") @Valid Employee empl, BindingResult result, ModelMap m)
当您尝试以表格形式显示错误时,Spring MVC需要引用有问题的模型。 因此,当您更改代码并添加new Employee()
时,该对象上没有错误。
采用
<form:form method="post" modelAttribute="empl" action="validate"></form>
以形式代替
<form:form method="post" commandName="empl" action="validate">
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.