【问题标题】:spring validation in a desktop application桌面应用程序中的弹簧验证
【发布时间】:2012-03-14 16:51:55
【问题描述】:

这里我有一个我能想象到的最基本的 spring 验证器的示例 :-)。因为它是一个桌面应用程序,所以我没有运行容器,它应该在某些时候调用 validate。
是否有任何实用程序可以像 spring 容器一样调用 validate 方法?或者调用 validate 就足够了?在这种情况下,我必须通过验证的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)

}

【问题讨论】:

    标签: java spring validation javabeans


    【解决方案1】:

    显然我知道这不是你想要的,但它就是这样。

    如果您只需要简单的验证,并且不打算使用 IoC 容器,我建议您使用 BeanValidation 或类似的东西。

    Here 就是一个例子。

    【讨论】:

    • 这是我提出的第一个问题,也许你可以在那里回复:stackoverflow.com/questions/9693656/…。如果你在谈论 JSR 303,它是一个 java EE 规范,可通过 Hibernate 或 Spring 3 实现!
    • AgostinoX: BeanValidation 是 JSR 303。它在 JEE 中使用,但也可以在标准 java 中使用。参考实现是“Hiberante Validator”,这不是 Hibernate (ORM)。这意味着您可以在独立应用程序中完美使用它。
    • 看起来 Apache BVal 实现刚刚通过了孵化器,所以这也是另一种选择。 incubator.apache.org/bval/cwiki/2012/02/21/…
    【解决方案2】:

    您需要做的就是创建一个 BindException 对象,其中包含要验证的对象和完全限定的类名。

    然后按照here 的说明使用ValidationUitls.invokeValidator() 方法验证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());
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-02
      • 2022-07-21
      相关资源
      最近更新 更多