2011-10-17 10 views
4

ConstraintValidatorからvalidator.validへのメッセージを返すには、foreach以外の方法もありますが、foreachは十分でしょうか?Validator.validateからConstraintValidatorContextを使用してConstraintViolationをマージする

簡単な例(はい、私は条件付きの検証をやろうとしている)

@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)

よう

関連する問題