2012-07-29 2 views
0

Si nous construisons un validateur JSR 303 personnalisé, y a-t-il un moyen de passer la valeur du champ au validateur au lieu du nom du champ?Validation inter-champs basée sur la valeur

Voici ce que je fais ..

J'ai besoin de construire une validation de niveau de classe personnalisée qui valide ce cas ..

Il y a deux champs A & B où B est un champ de date. Si la valeur de A est 1, vérifiez que B n'est pas nul et que sa valeur est future.

Maintenant, j'ai été en mesure de construire une validation avec ces exigences suivant this après. Dans la méthode isValid() de FutureDateValidator, j'ai vérifié si la valeur de A est 1 ou non, puis j'ai vérifié la validité de la date.

@CustomFutureDate (first = "dateOption", seconde = "date", message = "Ce doit être une date future.")

Maintenant, j'ai nouvelle série de domaines C et D, où D est à nouveau le champ de date. Cette fois, je dois vérifier que D est une date future si la valeur de C est 2. Dans ce cas, je ne peux pas utiliser le validateur que j'ai déjà implémenté car il a la valeur du premier champ codée en dur. Alors, comment puis-je résoudre ce problème pour réutiliser le même validateur pour ces deux cas.

Répondre

0

ne pas figer les valeurs 1/2 ont rendu personnalisable:

@CustomFutureDate(first = "dateOption", firstValue = "1", second = "date", message = "This must be a future date.") 

Pour le faire fonctionner, vous devez modifier l'annotation @CustomFutureDate:

public @interface CustomFutureDate { 
    String first(); 
    String firstValue(); 
    ... 
} 

et mise en œuvre:

public class CustomFutureDateValidator implements ConstraintValidator<CustomFutureDate, Object> { 
    private String firstFieldName; 
    private String firstFieldValue; 
    ... 

    @Override 
    public void initialize(final CustomFutureDate constraintAnnotation) { 
     firstFieldName = constraintAnnotation.first(); 
     firstFieldValue = constraintAnnotation.firstValue(); 
     ... 
    } 

    @Override 
    public boolean isValid(final Object value, final ConstraintValidatorContext context) { 
     // use firstFieldValue member 
     ... 
    } 
} 
+0

Merci php-codeur. Je n'ai pas essayé cela car j'étais absent du bureau ces derniers jours. J'en ferai certainement usage. Merci encore! – RKodakandla

Questions connexes