我正在使用Spring mvc web app,我正在尝试使用Spring的Validator验证数据库对象person
,并尝试将JSP表单中的验证器结果显示为form:errors path=""
。
我在控制器中有服务器端方法:
@RequestMapping( value="/find", method = RequestMethod.GET )
public ModelAndView search(@ModelAttribute("Person") Person p,BindingResult result){
Person person2 = personDao.get( p.getId() );
ModelAndView mav = new ModelAndView("templates/person");
PersonValidator personValidator = new PersonValidator();
personValidator.validate(person2, result);
mav.addObject("person",person2);
mav.addObject("errors",result.getFieldErrors());
return mav;
}
我有JSP代码:
<form:form commandName="person" >
<form:input path="personEmail" />
<form:errors path="personEmail" element="div" />
</form:form>
如果我明确地输入错误消息${errors.personEmail }
但是,
<form:errors path="personEmail" element="div" />
不起作用。
你能告诉我这里有什么问题吗?
答案 0 :(得分:1)
我做了以下更改,现在解决了。 :d
@RequestMapping( value="/find", method = RequestMethod.GET )
public String search(@ModelAttribute("Person") Person p,BindingResult result,ModelMap model){
Person person2 = personDao.get( p.getId() );
PersonValidator personValidator = new PersonValidator();
Errors errors = new BeanPropertyBindingResult(person2, "person");
personValidator.validate(person2, errors);
model.addAttribute("person",person2);
model.addAttribute("errors",errors);
return "templates/person";
}
答案 1 :(得分:0)
请尝试缩小变量名称。
你有@Model属性(“Person”),其中命令被命名为Person,而不是你的jsp中你有人和personValidator.validate(person,result);你有人 您应该验证BindingResult =&gt;之前的同一个对象。 Person p或者你必须像这样明确地为特定对象创建绑定结果
BindingResult errors = new BeanPropertyBindingResult(person,"person");
validate(Person person, Errors errors);