весенняя проверка в настольном приложении - PullRequest
1 голос
/ 14 марта 2012

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

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

Сначала у меня есть класс Person со свойством Stirng firstName и String 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, который просто проверяет, имеет ли Person ненулевое 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)

}

Ответы [ 2 ]

3 голосов
/ 14 марта 2012

Очевидно, я знаю, что это не то, о чем вы просите, но вот оно.

Если вам нужна простая проверка, и вы не планируете использовать контейнер IoC, я бы предложил использовать BeanValidation или что-то подобное.

Здесь является примером.

0 голосов
/ 18 октября 2014

Все, что вам нужно сделать, это создать объект BindException с вашим объектом для проверки и полным именем класса.

Затем используйте метод ValidationUitls.invokeValidator() для проверки компонента, как описано здесь .

Вот пример кода, поясняющий, что я имею в виду:

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