2012-03-14 5 views
1

여기에 가장 기본적인 스프링 검사기 샘플이 있습니다 .--). 데스크톱 응용 프로그램이므로 특정 순간에 유효성 검사를 호출해야하는 컨테이너를 실행하고 있지 않습니다.
봄 컨테이너와 같은 방식으로 validate 메소드를 호출하는 유틸리티가 있습니까? 또는 validate를 호출하는 것으로 충분합니까? 이 경우 유효성 검사를 위해 전달해야하는 Errors 개체의 구체적인 구현은 무엇입니까? Stirng firstName을 속성과 문자열 secondName 속성을,
데스크톱 응용 프로그램의 스프링 유효성 확인

처음에는 Person 클래스가 있습니다 : 여기

은 예 (주로 장식)는 다음

public static class Person { 
    public static final String PROP_FIRSTNAME = "firstName"; 
    String firstName; 
    public static final String PROP_SECONDNAME = "secondName"; 
    String secondName; 

    public String getFirstName() {return firstName;} 
    public void setFirstName(String firstName) {this.firstName = firstName;} 

    public String getSecondName() {return secondName;} 
    public void setSecondName(String secondName) {this.secondName = secondName;} 

} 

나는 단순히 PersonValidator이 Person이 null이 아닌 firstName을 가지고 있는지 확인하십시오.

public static class PersonValidator implements Validator { 

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

    public void validate(Object target, Errors errors) { 
     ValidationUtils.rejectIfEmpty(errors, Person.PROP_FIRSTNAME , "First name must be "); 
    } 

} 

이제 문제가 생깁니다 : 어떻게 사용합니까?

public static void main(String [] args) { 

    Person p = new Person(); 

    PersonValidator v = new PersonValidator(); 

    //HOW TO PERFORM VALIDATION? 
    //v.validate(p, null) 

} 

답변

3

분명히 나는 ​​이것이 당신이 요구하는 것이 아니라는 것을 알고 있습니다.

단순한 유효성 검사가 유일한 경우 IOC 컨테이너를 사용하지 않으려면 BeanValidation 또는 이와 비슷한 것을 사용하는 것이 좋습니다.

Here은 예입니다.

+0

는, 아마도 당신이 거기에 회신 할 수 있습니다 : 여기

무슨 뜻인지 명확하게 몇 가지 예제 코드입니다 http://stackoverflow.com/questions/9693656/javabeans-validation- in-a-desktop-application/9695098 # comment12334789_9695098. JSR 303에 대해 이야기하고 있다면, 이것은 하이버 네이트 또는 스프링 3 구현에서 사용할 수있는 자바 EE 사양입니다! – AgostinoX

+1

AgostinoX : BeanValidation은 JSR 303입니다. JEE에서 사용되지만 standart java에서도 사용할 수 있습니다. 참조 구현은 "Hiberante Validator"이며, 이것은 Hibernate (ORM)이 아닙니다. 즉, 독립 실행 형 응용 프로그램에서 perferct를 사용할 수 있습니다. – Ralph

+0

방아쇠를 통과 한 Apache BVal 구현과 비슷해 보입니다. 다른 대안이기도합니다. http://incubator.apache.org/bval/cwiki/2012/02/21/apache-bval-has-graduated-the-incubator.html – ebaxt

-2

개체의 유효성을 검사하고 정규화 된 클래스 이름을 사용하여 BindException 개체를 만들면됩니다.

그런 다음 ValidationUitls.invokeValidator() 메소드를 사용하여 설명 된대로 here과 같은 bean의 유효성을 검사하십시오.

내가 넣어 첫 번째 질문입니다
ApplicationContext context = new  ClassPathXmlApplicationContext("applicationContext.xml"); 

    Person person = context.getBean(Person.class); 

    PersonValidator personValidator = context.getBean(PersonValidator.class); 

    BindException errors = new BindException(person, Person.class.getName()); 
    ValidationUtils.invokeValidator(personValidator, person, errors); 

    if(errors.hasErrors()){ 
     System.out.println(errors.getAllErrors()); 
    } 
관련 문제