Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring验证程序-使用<;显示错误;形式:错误_Java_Spring_Validation_Jsp_Spring Mvc - Fatal编程技术网

Java Spring验证程序-使用<;显示错误;形式:错误

Java Spring验证程序-使用<;显示错误;形式:错误,java,spring,validation,jsp,spring-mvc,Java,Spring,Validation,Jsp,Spring Mvc,我在一个spring mvc web应用程序中工作,我试图使用spring的验证器验证db对象person,并试图以JSP形式将验证器的结果显示为form:errors path=”“。 我在控制器中有服务器端方法,如下所示: @RequestMapping( value="/find", method = RequestMethod.GET ) public ModelAndView search(@ModelAttribute("Person") Person p,BindingResult

我在一个spring mvc web应用程序中工作,我试图使用spring的验证器验证db对象
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>
不起作用


您能告诉我这里出了什么问题吗?

请尽量缩小变量名称的范围

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

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

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

PersonValidator做什么?它是一个简单的Spring验证器。它的实现类似于
public类PersonValidator实现验证器{public boolean supports(class clazz){return Person.class.equals(clazz);}public void validate(Object obj,Errors e){
重要的部分是
validate
方法主体。您是否在validate方法中调用
result.rejectValue
?还要尝试将@modeldattribute更改为
person
(小写p)是的,我将rejectIfEmpty调用为-
public void validate(对象目标,错误){ValidationUtils.rejectIfEmpty(错误,字段,“必选”,“必选”);}
。我还尝试使用
person
而不是
p
@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";
 }