春天验证 - 使用显示错误(Spring Validator - show errors using

2019-09-18 00:27发布

我在Spring MVC的Web应用程序,其中我试图验证一个db对象工作的person使用Spring的验证,并试图证明验证的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" />

不工作。

能否请你建议我有什么不对吗?

Answer 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";
 }


Answer 2:

请尽量缩小变量名。

你已经得到@Model属性(“人”),其中的命令名为人比你的JSP你的人,在personValidator.validate(人,结果); 你的人。 你应该确认这是BindingResult =>人员P前的同一对象或你必须明确地创建特定对象绑定的结果是这样

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


文章来源: Spring Validator - show errors using