2011-10-17 26 views
4

是否有某種方法(除foreach,但良好的foreach可能就足夠了),從validator.valid自定義ConstraintValidator返回消息?合併ConstraintViolation設置validator.validate與ConstraintValidatorContext

簡單的例子(是的,我正在努力做的條件驗證)

@TestFormConstraint 
public class TestForm { 

    @NotEmpty 
    String foo; 

    boolean checkBar = false; 

    @NotEmpty(groups=CheckBarGroup.class) 
    String bar; 

    //getters & setters ... 
} 
public class TestFormValidator 
     implements ConstraintValidator<TestFormConstraint, TestForm> { 

    @Autowired 
    private Validator validator; 

    @Override 
    public void initialize(ValidTestForm constraintAnnotation) {} 

    @Override 
    public boolean isValid(TestForm form, ConstraintValidatorContext context) { 
     if(form.isCheckBar()){ 
      Set<ConstraintViolation<TestForm>> con = 
        validator.validate(form, CheckBarGroup.class); 
      if(!con.isEmpty()){ 
       //ok, so what to do here? iterate over con and for each msg 
       //call context.buildConstraintViolationWithTemplate ? 
       return false; 
      } 
     } 
     return true; 
    } 

} 

任何想法?

回答

0

您可以對這些情況使用組。 因此,請刪除checkBar字段,只需指定或不要CheckBarGroup

validator.validate(testForm)validator.validate(testForm, CheckBarGroup.class, Default.class)