共享库中的Bean Validation约束

时间:2012-07-27 07:57:54

标签: bean-validation

我有很多使用相同验证限制的jsf2 web项目。

  1. 我可以将所有这些约束放在共享库中吗?
  2. 如果是,我可以提供验证消息的转换吗?
  3. 如果是,我怎样才能以标准方式实现?
  4. 以下包结构是否正确?
  5. commons.jar library:

    commons.jar
        |
        + library
        |   |
        |   + CustomConstraint1.class
        |   + CustomConstraint2.class
        |
        + ValidationMessages_it.properties
        + ValidationMessages_en.properties
        + ValidationMessages_de.properties
    

2 个答案:

答案 0 :(得分:2)

  
      
  1. 我可以将所有这些约束放在共享库中吗?
  2.   

是的,你可以。

  
      
  1. 如果是,我可以提供验证消息的转换吗?
  2.   

是的,这也是可能的。

  
      
  1. 如果是,我怎样才能以标准方式实现?
  2.   

例如,您有这样的约束:

package com.example.constraints;

@Target({
        ElementType.FIELD,
        ElementType.PARAMETER,
        ElementType.METHOD
})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {
    FooValidator.class
})
public @interface Foo
{
    String message() default "{com.example.constraints.Foo.message}";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}

在类路径的根目录中指定ValidationMessages.properties(对于应用程序的默认语言)。对于额外的区域设置,您应指定ValidationMessages_[locale].properties文件。对于荷兰语区域设置,它应为ValidationMessages_nl.properties

然后在这些文件中,您将消息变量定义为键,将消息定义为如下值:

com.example.constraints.Foo.message=Foo is not valid

答案 1 :(得分:1)

您的捆绑适用于独立的jar。如果你使用它自己的约束和类路径根目录中的ValidationMessages.properties将这个jar放入ear / war中,它将无法工作。