Class SwingValidator<B>

  • Type Parameters:
    B - le type de bean a valider

    public class SwingValidator<B>
    extends org.nuiton.validator.bean.simple.SimpleBeanValidator<B>
    La surcharge de SimpleBeanValidator pour les ui swing

    Permet d'ajouter facilement le support de la validation des champs d'un bean et de le relier a une interface graphique. Utilise xwork pour la validation et JXLayer pour la visualisation.

    Le mieux pour son integration dans Jaxx est de faire de la generation pour force la compilation du code suivant:

     myValidor.getBean().get<field>();
     

    et ceci pour chaque field ajoute a la map fieldRepresentation. De cette facon meme si le champs field est en texte on a une verification de son existance a la compilation.

    La representation en tag pourrait etre

     <validator id="myValidator" beanClass="{Personne.class}"
     errorList="$list">
       <field name="name" component="$name"/>
       <field name="firstName" component="$firstName"/>
       <field name="birthDate" component="$birthDate"/>
     </validator>
     <validator beanClass="{Personne.class}" autoField="true"
     errorList="$list">
       <fieldRepresentation name="name" component="$lastName"/>
     </validator>
     

    dans le premier exemple on fait un mapping explicite des champs, mais on voit que le nom du composant graphique est le meme que celui du champs. Pour eviter de longue saisie, il est possible d'utiliser le flag autoField qui pour chaque champs du ayant une methode get du bean recherche un composant avec cet Id. Il est aussi possible de surcharge un champs explicitement comme ici name, dans le cas ou le composant qui porterait ce nom serait utilise pour autre chose.

    Il faut un handler particulier pour ce composant car les attributs beanClass et autoField ne sont present que dans le XML jaxx et servent a la generation. Il faut aussi prendre en compte les elements fieldRepresentation fils du tag validator.

    Voici ce que pourrait etre le code genere par jaxx

     // declaration du bean
     BeanValidator<beanClass> $myValidator;
     // init du bean
     protected void createMyValidator() {
       $myValidator = new BeanValidator<beanClass>();
       // genere seulement si autoField = true
       for (Method m : beanClass.getMethod()) {
         if (m.getName().startsWith("get")) {
           String fieldName = m.getName().substring(3).toLowerCase();
           $myValidator.setFieldRepresentation(fieldName,
     $objectMap.get(fieldName));
         }
       }
       // pour chaque tag fieldRepresentation
       myValidator.setFieldRepresentation("name", $lastName);
       // si beanClass est specifie et n'est pas Object, on force l'acces au
     champs
       // pour validation a la compilation
       $myValidator.getBean().getName();
       $objectMap.put("myValidator", $myValidator);
     }
     
    Version:
    1.0
    Author:
    Tony Chemit - dev@tchemit.fr