Can't show error message after failed spring mvc form validation
我在商业模式上上课了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public class User { @Size(min = 3, max = 20, message ="Username must be between 3 and 20 characters long") @Pattern(regexp ="^[a-zA-Z0-9]+$", message ="Username must be alphanumeric with no spaces") @Column(name ="name") private String name; @Id @GeneratedValue @Column(name ="user_id") private Long userID; @OneToMany(cascade = CascadeType.ALL) @JoinTable(name ="userDic", joinColumns = { @JoinColumn(name ="user_id", referencedColumnName ="user_id") }, inverseJoinColumns = { @JoinColumn(name ="acc_id", referencedColumnName ="acc_id") }) @LazyCollection(value = LazyCollectionOption.FALSE) private Set<Account> allAccounts; //............. //constructors , setters , getters here |
在新用户的jsp输入中,通过spring形式发生:
1 2 3 4 5 6 7 8 9 10 11 12 | <form:form method="post" action="AddUser" modelAttribute="user"> <table> <tr> <td><form:label path="name">First Name</form:label></td> <td><form:input path="name" /></td> <td><form:errors path="*" /></td> </tr> <tr> <td colspan="2"><input type="submit" value="Add User" /></td> </tr> </table> </form:form> |
这里是处理此jsp的控制器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | @Controller @SessionAttributes public class AdminServlet { /* private UserValidator validator; @InitBinder("user") protected void initBinder(WebDataBinder binder) { binder.setValidator(validator); }*/ @RequestMapping(value ="/") public ModelAndView showUsers() throws ClassNotFoundException, SQLException { ModelAndView mav = new ModelAndView(); mav.setViewName("index"); mav.addObject("ATMUsers", MainService.getAllUsers()); mav.addObject("user", new User()); return mav; } @RequestMapping(value ="/AddUser", method = RequestMethod.POST) public String AddUser(@ModelAttribute("user") @Valid User user, BindingResult result) { if (!result.hasErrors()) MainService.AddUser(user); return"redirect:/"; } } |
验证对于字段
如果我取消注释控制器中关于
javax.validation.ConstraintViolationException: validation failed for classes [com.antonbanking.business.User] during persist time for groups [javax.validation.groups.Default, ]
问题是我仅获得验证错误消息时做错了什么? BTW的完整代码可在github中找到。
我自己解决问题-问题是AdminServlet.AddUser的回报。因为我做了
更改后
1 2 3 4 5 6 7 | @RequestMapping(value ="/AddUser", method = RequestMethod.POST) public String AddUser(@ModelAttribute("user") @Valid User user, BindingResult result) { if (!result.hasErrors()) MainService.AddUser(user); return"redirect:/"; } |
至
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | @RequestMapping(value ="/AddUser", method = RequestMethod.POST) public ModelAndView AddUser(@ModelAttribute("user") @Valid User user, BindingResult result) { ModelAndView mav = new ModelAndView(); mav.setViewName("index"); mav.addObject("ATMUsers", MainService.getAllUsers()); if (result.hasErrors()) mav.addObject("user", user); else { mav.addObject("user", new User()); MainService.AddUser(user); } return mav; } |
所有开始正常工作。
请参见BindingResult(来自Errors的addError或reject *)
另请参见验证(无注释)