Spring 验证器 - 使用 <form:errors 显示错误



我正在一个Spring mvc Web应用程序中工作,我正在尝试使用Spring的验证器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" />

不起作用。

你能告诉我这里有什么问题吗?

我做了以下更改,现在已经解决了。 :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";
 }

请尝试缩小变量名称。

你有@Model属性("Person"),其中命令被命名为Person,而不是在你的jsp中你有person和personValidator.validate(person,result);你有person。您应该验证 BindingResult => Person p 前面的同一对象,或者您必须像这样显式地为特定对象创建绑定结果

BindingResult errors = new BeanPropertyBindingResult(person,"person");
validate(Person person, Errors errors);

最新更新