2012-04-23 6 views
0

스프링 MVC 3을 사용하는 웹 애플리케이션에 대한 검증을 구현해야한다. 빈 클래스에는 getProperty ("name") 및 setProperty ("name", valueObj)와 같은 메소드가있다. getProperty ("name")에 다른 값을 전달하여 반환되는 데이터에 대해 유효성 검사를 수행해야합니다. 예를 들어 getProperty ("age")는 16보다 커야하며 getProperty ("state")가 필요합니다.스프링 MVC 빈 검증

이런 종류의 Bean에 대한 지원이 있는지 알고 싶습니다. 그렇지 않은 경우, 해결 방법이 무엇인지 알고 싶습니다.

덕분에, ATIF

+1

클래스 그냥 빈 아니다 이럴. – SJuan76

답변

1

org.springframework.validation.Validator을 구현하는 사용자 지정 유효성 검사 클래스를 원하는 것처럼 들립니다. 다음과 같은

@Component 
public class MyValidator implements Validator { 

    @Override 
    public boolean supports(Class<?> clazz) { 
     return MyBean.class.isAssignableFrom(clazz); 
    } 

    @Override 
    public void validate(Object target, Errors errors) { 
     MyBean myBean = (MyBean) target; 

     if (StringUtils.isBlank(myBean.getProperty("state"))) { 
      errors.rejectValue("state", "blank"); 
     } 
    } 

} 

는 컨트롤러에서 당신은 수동 validaton 할 것 :

@Autowired 
private MyValidator myValidator; 

@RequestMapping(value = "save", method = RequestMethod.POST) 
public String save(@ModelAttribute("myBean") MyBean myBean, BindingResult result) { 

    myValidator.validate(myBean, result); 
    if (result.hasErrors()) { 
     ... 
    } 

    ... 

} 
+1

+1, 그게 작동합니다. 그러나 그의 콩은 유효성 검사를하기 전에 적절히 묶이지 않을 것입니다. 따라서 사용자 지정 바인딩도 필요합니다. ;) – Bozho

+0

@Bozho 아주 좋은 점, 진정한 JavaBeans의 또 다른 인수 :) –

+0

Struts 1.x에서는 각 클래스를 만드는 오버 헤드없이 xml에서 bean 속성을 정의해야했던 DynaBean이있었습니다. Spring은 Bean 클래스를 생성하면서 동적으로 또는 설정에 의해 그러한 메소드를 제공합니까? 우리는 XML에서 bean과 검증을 정의 할 수 있을까요? –

4

나는 그렇게 생각하지 않습니다. 빈 유효성 검사는 javabean, 즉 getter 및 setter가있는 클래스 필드에서 수행됩니다. 사용자 정의 유효성 검사기를 등록하고 유효성 검사 작업을 수행 할 수있는 경우에도 바인딩이 작동하지 않습니다. 개체를 채우는 사용자 지정 바인더도 등록해야합니다. 그것은 다소 복잡해집니다. 그래서 javabeans 대회에 충실하십시오.