我有使用JSR-303注释的简单模型
public class Article {
...
@NotNull
private String tag;
...
}
tag
字段未暴露在表单中,而是填充在控制器的方法中
public class ArticleController {
...
@RequestMapping(value = "/edit", method = PUT)
public String doEdit(@Valid @ModelAttribute("article") final Article article,
final BindingResult bindingResult) {
// generates article's tag, not editable by user
article.setTag(generateTag(article));
if (bindingResult.hasErrors()) {
return "/edit";
} else {
service.save(article);
return "redirect:/list";
}
}
现在bindingResult
始终在tag
字段上没有空错误,因为bean在设置之前已经过验证。如何设置tag
字段后重新验证文章bean并填充正确bindingResult
?
答案 0 :(得分:2)
尝试
public class ArticleController {
// inject the spring validator.
@Autowired
private LocalValidatorFactoryBean validator;
@RequestMapping(value = "/edit", method = PUT)
public String doEdit(@ModelAttribute("article") final Article article,
final BindingResult bindingResult) {
// generates article's tag, not editable by user
article.setTag(generateTag(article));
// validate
validator.validate(article, bindingResult);
if (bindingResult.hasErrors()) {
return "/edit";
} else {
service.save(article);
return "redirect:/list";
}
}
}