2012-03-14 5 views
1

Здесь у меня есть образец самого элементарного весового валидатора, который я могу себе представить :-). Поскольку это настольное приложение, я не запускаю контейнер, который должен вызывать проверку в определенные моменты.
Есть ли какая-нибудь утилита для вызова метода проверки так же, как это делает весенний контейнер? Достаточно ли вызывать подтверждение? В этом случае, какова конкретная реализация объекта Errors, которую я должен пройти для проверки?весенняя проверка в настольном приложении

Вот пример (в основном декоративный):

Во-первых у меня есть класс Person, со свойством Stirng ПгвЬЫата и свойством Строки secondName:

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, что просто проверьте, имеет ли лицо не нуль 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, это спецификация Java EE, доступная через реализацию Hibernate или Spring 3! – AgostinoX

+1

AgostinoX: BeanValidation - JSR 303. Его используют в JEE, но он также может использоваться в стандартной java. Эталонная импликация - «Hiberante Validator», это НЕ Спящий режим (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.

Вот несколько примеров кода, чтобы уточнить, что я имею в виду:

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()); 
    }