2009-06-24 5 views
0

Existe-t-il un moyen approprié d'accéder à d'autres champs de formulaire à l'intérieur d'un validateur? Y at-il une autre solution que:accéder aux paramètres de la demande depuis le validateur interne

context.getViewRoot().findComponent("formid:exampleField:example")?

f.e Je veux valider un champ de la ville dans un validateur personnalisé et vérifier si le pays est des États-Unis.

+0

Avez-vous trouvé une réponse à votre question? –

Répondre

1

Relisez votre question et je vais l'interpréter comme ceci:

« Vous souhaitez écrire un validateur personnalisé qui vérifie que si un champ de la ville existe, le champ pays est égal à « US » "

Alors, je regardais aller à ce sujet de la manière suivante:

d'abord créer une interface validateur:

@Documented 
@ValidatorClass(value=CountryEqualsUSValidator.class) 
@Target(ElementType.TYPE) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface CountryEqualsUS { 

    String message() default "The country should be US for the city provided"; 

} 

Ensuite, créez av classe alidator:

public class CountryEqualsUSValidator implements Validator<CountryEqualsUS> { 

    public void initialize(CountryEqualsUS arg0) { 
    } 

    public boolean isValid(Object value) { 

     if(value != null && value instanceof YourBeanClass) { 

      YourBeanClass yourBeanClass = (YourBeanClass) value; 

      if(/*some test logic here*/) { 
       return true; 
      else { 
       return false; 
      } 

     } 

     return false; 

    } 

} 

ensuite sur la classe que vous souhaitez valider:

@CountryEqualsUS 
public class YourBeanClass { 

    ... 

} 

Puis, enfin, votre classe contrôleur/action, lorsque le formulaire est soumis, la ville est une valeur pour que vous voulez vérifier le pays, ajoutez cette méthode et appelez-le:

public boolean doValidation(YourBeanClass yourBeanClass) { 

    ClassValidator requestValidator = new ClassValidator(yourBeanClass.getClass()); 
    InvalidValue[] validationMessages = requestValidator.getInvalidValues(yourBeanClass); 

    if (validationMessages != null && validationMessages.length > 0) { 

     for (int i = 0; i < validationMessages.length; i++) { 

      //Add a validation message to be displayed to the user 

     } 

     return false; 

    } 
     return true; 
} 
Questions connexes