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 :

[Struts] 2 validations ds le même formulaire avec validwhen?


Sujet :

Struts 1 Java

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 31
    Points : 17
    Points
    17
    Par défaut [Struts] 2 validations ds le même formulaire avec validwhen?
    salut,
    j'ai un formulaire ayant deux boutons , un pour afficher les infos d'un utilisateur (select dans une bdd) dans les champs du form et l'autre pour modifier ces champs (update de la bdd).
    au départ j'ai géré la modification correctement en spécifiant dans validation.xml que plusieurs champs était requis.
    pour l'action "afficher" je ne dois utiliser qu'un seul champs (le nom) et ensuite valider le form et renseigner les autres champs.

    je pensais utiliser un LookupDispatchAction (d'ailleurs si on pouvait m'expliquer ou placer et comment utiliser la methode getKeyMethodMap présente ds la FAQ ^^) mais le problème est que pour l'action "modifier" je dois renseigner plusieurs champs pour valider le form (exceptions grâce au validation.xml) et pour l'action "afficher" seul un champs est obligatoire.

    comment gérer alors 2 validations différentes??

    merci.

  2. #2
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 31
    Points : 17
    Points
    17
    Par défaut
    UP!
    personne ne sait utiliser le validator avec 2 actions différentes?

  3. #3
    Rédacteur
    Avatar de lunatix
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2002
    Messages
    1 960
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 960
    Points : 3 736
    Points
    3 736
    Par défaut
    tu dois faire heriter ton formulaire de ValidatorActionForm et non de ValidatorForm. Comme cela tu peux ajouter un parametre supplementaire dans validation.xml qui est le path de l'action qui est utilisé !

    tu trouveras un exemple ICI

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 31
    Points : 17
    Points
    17
    Par défaut
    ok, merci pour le lien.
    j'ai appliqué les modif à mes fichiers mais il me dit donne une erreur à l'execution...le formulaire n'est pas déclaré dans le validation.xml (No form found under 'changeUserForm' in locale 'fr')

    mon code est le suivant :
    ---struts-config :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <form-bean name="changeUserForm" type="org.apache.struts.validator.DynaValidatorActionForm">
    ....
    </form-bean>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            <action path="/changeUser/display"
                type="struts.form.changeUserForm"
                name="changeUserForm">
                    <forward name="reponse" path="adminPage"/>
            </action>
            <action path="/changeUser/modify"
                type="struts.form.changeUserForm"
                name="changeUserForm">
                    <forward name="reponse" path="adminPage"/>
            </action>
    ---validation.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
                    <form name="/changeUser/display">
                            <field property="user" depends="required">
                                    <arg0 key="prompt.user"/>
                            </field>
                    </form>
                    <form name="/changeUser/modify">
                            <field property="user" depends="required">
                                    <arg0 key="prompt.user"/>
                            </field>
                            <field property="passwd">
                                    <arg0 key="prompt.passwd"/>
                            </field>
                            ...
                    </form>
    est ce que j'ai oublié qq chose??
    merci.

  5. #5
    Membre régulier
    Avatar de Jaxofun
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 108
    Points : 84
    Points
    84
    Par défaut
    Je pense que tu as mal configuré ton struts-config.xml :

    La balise form-bean permet de fournir un identifiant à l'un de tes formBean et non à repréciser de quel classe de struts il herite. Donc dans l'attibut name tu crée un nouvel identifiant (qui reprend généralement le nom de ta classe) et dans l'attribut type tu précise le nom de ta classe (avec le path bien sur).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <form-bean name="changeUserForm" type="struts.form.changeUserForm"> 
    .... 
    </form-bean>

    Et dans la balise action, name va préciser l'identifiant du formBean utilisé que tu à inventé précèdement et type va préciser l'ActionBean utilisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <action path="/changeUser/display" 
                type="struts.action.changeUserAction" 
                name="changeUserForm"> 
           <forward name="reponse" path="adminPage"/> 
    </action>
    Et pour validation.xml c'est pareil : l'attribut name de la balise form doit indiquer un identifiant de formBean.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <form name="changeUserForm"> 
              <field property="user" depends="required"> 
                             <arg0 key="prompt.user"/> 
              </field> 
    </form>

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 31
    Points : 17
    Points
    17
    Par défaut
    merci mais je pense que tu n'a pas vu l'exemple que donne lunatix plus haut.
    le but était justement de définir un path et non un nom de formulaire pour faire appel à une validation différente selon l'action.

    je pense que le problème vient de la façon dont j'appelle mon formulaire dans le jsp qu'il faudrait changer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <html:javascript formName="changeUserForm"/>
    <html:form action="/changeUser" enctype="utf-8" onsubmit="return validateChangeUserForm(this);">
    d'autre part j'ai utilisé un LookupDispatchAction pour ma classe afin d'appeler correctement les actions associées aux bouttons or l'exemple du lien demande d'avoir une classe en ValidatorActionForm ou en DynaValidatorActionForm donc je ne sais pas si cela va fonctionner en combinant ces deux méthodes...

    je suis ouvert à tte suggestions concernant la validation/gestion de plusieurs action différentes dans un même formulaire.
    merci

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 31
    Points : 17
    Points
    17
    Par défaut
    j'ai trouvé l'action validwhen du validator et je pense qu'elle pourrait m'aider à faire ce dont j'ai besoin.
    à savoir, lorsque je clique sur un bouton j'affecte une valeur à un champs caché et le validator (avec validwhen) s'en sert pour savoir quel validation utiliser.

    or, je ne comprend pas bien le comportement de validwhen...mon code est le suivant :
    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
     
    <form name="changeUserForm">
          <field property="actiontype">
               <arg0 key="changeUserForm.actiontype"/>
          </field>
          <field property="user" depends="required">
               <arg0 key="changeUserForm.user"/>
         </field>
         <field property="authlevel" depends="validwhen">
               <arg0 key="changeUserForm.authlevel"/>
               <var>
                   <var-name>test</var-name>
                   <var-value>(actiontype == "modify")</var-value>
              </var>
        </field>
    </form>
    actuellement seul la validation de "user" est effectué, rien de plus, alors que j'ai ceci dans ma page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <html:hidden property="actiontype" value="modify"/>
    <html:submit property="submit" styleClass="smallbutton" onclick="document.changeUserForm.actiontype.value='modify'">
    comment être sûr de ce qu'est censé faire validwhen ? (required par défaut?)
    aucune fonction validwhen n'est présente dans le js généré dans la page...

    j'ai trouvé qq exemples sur le net (toujours incomplets...) mais rien ne m'a dépanné
    merci pour votre aide sur cette fonction.

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/04/2009, 17h51
  2. Réponses: 0
    Dernier message: 10/09/2008, 20h40
  3. Réponses: 1
    Dernier message: 21/05/2007, 19h57
  4. [formulaire]réafficher le même formulaire avec les éléments saisis
    Par melisse dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 05/02/2007, 16h56
  5. Réponses: 8
    Dernier message: 13/03/2006, 17h37

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