IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Struts 1 Java Discussion :

Encore une question sur le Validator Plugin


Sujet :

Struts 1 Java

  1. #1
    vny
    vny est déconnecté
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 74
    Points : 48
    Points
    48
    Par défaut Encore une question sur le Validator Plugin
    Bonjour,

    Qq'un pourrait-il me dire où Struts va placer les messages d'erreur suite à une validation côté client via le validator plugin ?
    Dans quelle property de ActionMessages ?
    Y a-t-il un moyen de spécifier qq part que les erreurs de validations client doivent aller dans une property particulière ?

    Mon soucis est que j'essaye de les afficher et pas moyen de faire coexister sur une même "page-tiles mis en header de ttes les pages" des erreurs de la validation client et des erreurs pouvant provenir d'ailleurs.

    Merci d'avance pour votre aide

  2. #2
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    bonjour,

    Je ne comprends pas trop le probleme, je vais essayer de repondre suivant ce que j'ai compris.

    Pour que le validator se fasse du coté client, il faut 2 fichiers XML, le validator-rules qui va faire l'association entre une contrainte et la classe java qui a été créé pour qu'elle marche; et le validator où l'on va déclarer toute nos contraintes sur les champs que l'on veut valider.
    Pour ca, il faut s'assurer que dans struts-config, on ait bien à la fin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
            <set-property property="pathnames" value="/WEB-INF/validator-rules.xml, /WEB-INF/validator.xml" />
        </plug-in>
    Dans le validator.xml, on va associé une ou plusieur contrainte à un ou plusieur champs d'un Form comme par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    <form-validation>
        <global>
             <constant>
                <constant-name>treize</constant-name>
                <constant-value>^\d{12}\d?$</constant-value>
            </constant>
        </global>
        <formset >
            <form name="gererForm" >
                <field property="parametre.numero" depends="required,mask" page="/WEB-INF/jsp/menu.jsp">
                    <arg key="parametre.numero" name="required"/>
                    <arg key="parametre.numero.longueur" name="mask"/>
                    <var>
                        <var-name>mask</var-name>
                        <var-value>${treize}</var-value>
                    </var>
                 </field>
            </form>
        </formset>
    </form-validation>
    Ici, je dis que le form gererForm de menu.jsp contient un champs numero qui doit etre spécifié et qui doit avoir une taille comprise entre 12 et 13 numéros.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <arg key="parametre.numero" name="required"/>
    <arg key="parametre.numero.longueur" name="mask"/>
    ceci va permettre de dire quoi afficher, les messages se trouvant dans un fichier properties comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    errors.invalid={0} est invalide.
    errors.required={0} est requis.
    parametre.numero=Le numero
    parametre.numero.longueur=Le numero (12 ou 13 chiffres)
    il ne reste plus qu'a le spécifier dans la JSP, où il faut rajouter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <html:form action="detailDossier.do" onsubmit="return validateGererForm(this)">
    ...
    <html:text property="parametre.numero" size="15" maxlength="13" value=""/>
    ...
    </html:form>
    <html:javascript formName="gererForm" />
    Voilou, j'espere que ca repondra à tes attentes. Coté client, le validator plugin génére automatiquement le javascript.

  3. #3
    vny
    vny est déconnecté
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 74
    Points : 48
    Points
    48
    Par défaut Merci pour les explications
    Ttes mes excuses mais mes explicatiosn n'étaient pas claires.

    La validtion semble très bien fonctionner.

    Si j'ai bein compris, les erreurs de validation (côté client) vont se placer dans un ActionErrors puisque j'arrive à les afficher via le tag <html:messages message="false" ...> sans donner de property

    Ma question est en fait : est-il possible
    1/ de spécifier qqpart que je voudrais retrouver ces erreurs dans un ActionErrors, dans la property "validationMsg" par exmple et y accéder via <html:messages messages="false" property="validationMsg"

    ou mieux encore dans un ActionMessages et y accéder via <html:messages messages="true" property="validationMsg" ..>

    En effet dans mon code, j'ai plusieurs property pour les ActionErrors et du fait de la validation cleint j'ai du supprimer le property dans html:messages .. ce qui m'ennuye pour la présentation ...
    J'espère que mon prob est un peu plus clair

    Ce qui m'étonne est que la validation fonctionne très bien et le code ne spécifie pas l'appel au javascript et dans le tag html:form, seule l'action est donnée en param .... Existe-t-il une explications ur le fait que cela marche sans cela ?

    merci bcp

  4. #4
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Ce sont les erreurs de validation côté serveur qui sont placés dans ActionErrors et tu peux les afficher via :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:errors property="nomDeLaPropriete"/>

  5. #5
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Points : 109
    Points
    109
    Par défaut
    les messages d'erreurs utilisés peuvent ils être sotckés dans un message-resources perso ?

    Si oui, faut il indiquer le 'bundle' du message-resource auquel appatient le message d 'erreur ?

    cad:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:errors bundle="myResources" property="nomDeLaPropriete"/>

  6. #6
    vny
    vny est déconnecté
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 74
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par c_nvy
    Ce sont les erreurs de validation côté serveur qui sont placés dans ActionErrors et tu peux les afficher via :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:errors property="nomDeLaPropriete"/>
    Oui autant pour moi
    Donc :
    validation serveur : ActionErrors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <html:errors property="validationServeur">
     ou 
    <html:messages message="false" property="validationServeur">
    Et la validation client ?
    Est ce que je peux paramétrer une property qqpart ? Sacahnt qe dnas le fichier validation-rules :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    methodParams="java.lang.Object,
                           org.apache.commons.validator.ValidatorAction,
                           org.apache.commons.validator.Field,
                           org.apache.struts.action.ActionMessages,
    ....
    Ttes mes excuses si je suis de comprenure ...

  7. #7
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Citation Envoyé par vny
    Ce qui m'étonne est que la validation fonctionne très bien et le code ne spécifie pas l'appel au javascript et dans le tag html:form, seule l'action est donnée en param ....
    Ce que je ne comprends pas, c'est que d'après ce que tu as écrit ci-dessus, tu n'as pas activé la validation côté client.

    Donc, je ne vois pas comment tu peux récupérer les messages d'erreur de validation côté client si tu ne l'as pas activé.

    Pour info, quand tu actives la validation côté client, les messages de validation s'affichent dans une popup.

  8. #8
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Points : 109
    Points
    109
    Par défaut
    La validation est activée par defaut.
    validate=true par defaut

  9. #9
    vny
    vny est déconnecté
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 74
    Points : 48
    Points
    48
    Par défaut Dans une popup
    Euh oui alors la validation client ne va pas en effet

    Mais pourtant si je tape par exemple 'aze' dans un champ dont la validation doit vérifier qu'il est float, je me retrouve avec la même page avec mon erreur affichée

    En fait je regarde le code d'un collègue et donc je partais du principe que la validation client focntionnait ainsi ... beeep mvse idée.
    On va débugger pour voir comment il me sort cette erreur de validation

  10. #10
    vny
    vny est déconnecté
    Membre du Club
    Inscrit en
    Mai 2004
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 74
    Points : 48
    Points
    48
    Par défaut Voilàààà
    J'ai enfin compris
    Ttes mes excuses .. enfin au moins j'ai encore appris, grâce à vous un morceau supplémetaire de Struts

    Il n'y a pas de validation client donc mais Struts va rechercher (tout seul come un grand) la méthode ValidatorForm.validate même si on a pas surchargé validate dans le form de notre projet
    Et je suppose que là il va voir dans un fichier de config xml pour savoir quoi valider, et me ressort doc la bonne validation, mais côté serveur.

  11. #11
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    En fait, pour que la validation via le plugin Validator fonctionne côté serveur :

    l'ActionForm doit hériter de ValidatorForm et il ne faut pas coder de méthode validate, sauf quand on souhaite combiner la validation via le Validator et une validation java plus complexe, comme indiqué dans la FAQ.
    l'attribut validate doit être égal à true dans le mapping de l'Action pour le form-bean correspondant.
    le plugin du Validator doit être déclaré dans le struts-config.xml dans la balise plug-in.
    les règles de validation doivent être définies dans un fichier validation.xml.
    les clés et libellés des messages d'erreurs par défaut du Validator doivent être définies dans le fichier des messages, soit celui déclaré dans le struts-config.xml dans la balise message-resources.

    Pour l'activer aussi côté client, comme te l'a indiqué zorm, il faut :

    ajouter l'attribut onsubmit="return validateNomDuFormBean(this);" dans le tag html:form
    ajouter le tag suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:javascript formName="nomDuFormBean" />
    Et lorsqu'on veut activer la validation simplement côté client, il faut mettre l'attribut validate à false dans le mapping de l'Action.
    Mais attention, il faut être sûr dans ce cas que le javascript est bien activé parce que sinon, il n'y aura pas de validation.

Discussions similaires

  1. Encore une question sur l'année
    Par Ric21 dans le forum Access
    Réponses: 2
    Dernier message: 15/12/2006, 10h34
  2. [VBA-E]Encore une question sur csv et les dates
    Par vovor dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/10/2006, 10h43
  3. Encore une question sur les Sous-Forums
    Par Swoög dans le forum Evolutions du club
    Réponses: 12
    Dernier message: 27/05/2006, 02h17
  4. Encore une question sur les ListBox !!
    Par SebRs dans le forum Windows
    Réponses: 3
    Dernier message: 09/05/2006, 15h29
  5. Encore une question sur malloc
    Par IG88 dans le forum C
    Réponses: 5
    Dernier message: 23/06/2004, 15h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo