[英]Spring mvc form error not comng on jsp
我正在尝试验证登录表单。 单击登录按钮后,控件进入我的控制器类,并在BindingResult的帮助下,我也知道我的字段有错误,但我无法在我的jsp页面上显示错误。 我已经尝试过rejectValue方法,但是我的jsp页面抛出异常,即属性不可读等
这是我的模特课。
public class UserBean
{
@NotEmpty
private String username;
@NotEmpty
private String password;
public String getPassword()
{
return this.password;
}
public String getUsername()
{
return this.username;
}
public void setUsername(String username)
{
this.username = username;
}
public void setPassword(String password)
{
this.password = password;
}
}
这是我的JSP页面。
<form:form method="POST" modelAttribute="login-entity"
action="process-login.html">
<table>
<tr>
<td><form:label path="username">username:</form:label></td>
<td><form:input path="username" /></td>
<td><form:errors path="username" /></td>
</tr>
<tr>
<td><form:label path="password">password:</form:label></td>
<td><form:input path="password" /></td>
<td><form:errors path="password" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="Login" /></td>
</tr>
</table>
</form:form>
这是我的控制器类。
@RequestMapping(value = "/process-login", method = RequestMethod.POST)
public ModelAndView processLogin(@Valid UserBean loginModel,BindingResult bindingResult, Model model)
{
if(bindingResult.hasErrors())
{
ModelAndView errorView = new ModelAndView("loginpage");
bindingResult.rejectValue("username","invalid username");
bindingResult.rejectValue("password","invalid password");
errorView.addObject("login-entity", bindingResult.getModel());
return errorView;
}
return new ModelAndView("redirect:/some_other_page","","");
}
在调试时,我的最终错误视图对象包含这个东西。
ModelAndView: reference to view with name 'loginpage'; model is {login-entity={userBean=UserBean [userId=0, username=, password=], org.springframework.validation.BindingResult.userBean=org.springframework.validation.BeanPropertyBindingResult: 4 errors
Field error in object 'userBean' on field 'username': rejected value []; codes [NotEmpty.userBean.username,NotEmpty.username,NotEmpty.java.lang.String,NotEmpty]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [userBean.username,username]; arguments []; default message [username]]; default message [may not be empty]
Field error in object 'userBean' on field 'password': rejected value []; codes [NotEmpty.userBean.password,NotEmpty.password,NotEmpty.java.lang.String,NotEmpty]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [userBean.password,password]; arguments []; default message [password]]; default message [may not be empty]
Field error in object 'userBean' on field 'username': rejected value []; codes [invalid username.userBean.username,invalid username.username,invalid username.java.lang.String,invalid username]; arguments []; default message [null]
有人可以帮忙吗? 我想我错过了一些非常基本的东西。
从控制器重定向到.jsp页面并向其分配错误消息时,可以向请求添加属性(ServletRequest.setAttribute(String var1,Object var2);)然后在jsp页面中查找属性和句柄相应的错误消息
您必须添加@ModelAttribute
注释,并且您不能创建新的ModelAndView
原因,因为新模型将不具有绑定结果错误。 以下应该适合你
public ModelAndView processLogin(@ModelAttribute("login-entity") @Valid UserBean loginModel,BindingResult bindingResult, Model model)
这样,错误将在模型中可用,并且查找键将匹配form:errors
的预期form:errors
标记
关于模型部分,你应该简单地做一些事情
if(bindingResult.hasErrors())
{
return null; // calling page
}
并且消息将在那里
您可以首先定义您的模型属性,
@ModelAttribute("UserBean")
public UserBean userCriteria() {
return new UserBean();
}
来自Controller
public ModelAndView processLogin(@ModelAttribute("UserBean") @Valid UserBean loginModel,BindingResult bindingResult, Model model)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.