Spring Validator - 显示错误使用

时间:2012-06-11 13:09:44

标签: java spring validation jsp spring-mvc

我正在使用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" />

不起作用。

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

2 个答案:

答案 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);