2012-06-11 3 views
3

저는 Spring의 Validator를 사용하고 form:errors path=""으로 JSP 형식의 유효성 검사기 결과를 표시하려고 db 객체 person의 유효성을 검사하려고 시도하는 spring mvc 웹 응용 프로그램에서 작업 중입니다. 나는이 JSP 코드가Spring Validator - <form : errors를 사용하여 오류를 표시합니다.

@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; 
} 

: 나는 같은 컨트롤러의 서버 측 방법이 내가 명시 적으로 오류 메시지를 넣을 경우 작동

<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

'PersonValidator'의 기능은 무엇입니까? – wrschneider

+0

간단한 스프링 검사기입니다. 그 구현은'Public class PersonValidator Validator { }를 구현합니다. public boolean supports (클래스 clazz) { return Person.class.equals (clazz); } public void validate (Object obj, Errors e) {' – gtiwari333

+0

중요한 부분은'validate' 메소드 본문입니다. validate 메소드에서'result.rejectValue'를 호출하고 있습니까? 또한 @ModelAttribute를'person' (대문자 p)로 변경해보십시오. – wrschneider

답변

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

변수 이름의 범위를 좁히십시오.

당신은 person이 있고 personValidator.validate (person, result)에있는 jsp보다 Person이라는 이름의 @Model Attribute ("Person")을 가지고 있습니다. 당신은 사람이 있습니다. 당신은 BindingResult => 사람이 피를 앞 동일한 개체를 확인해야합니다 또는 당신은 내가 다음과 같이 변경 한이

BindingResult errors = new BeanPropertyBindingResult(person,"person"); 
validate(Person person, Errors errors); 
관련 문제