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 :

html:form et action correspondante


Sujet :

Struts 1 Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 104
    Points : 103
    Points
    103
    Par défaut html:form et action correspondante
    Bonjour.

    Je dispose d'un formulaire relié à une action A

    Le submit de ce formulaire renvoie à cette action en passant d'abord par un actionForm qui valide le formulaire.


    Mon problème vient du fait que j'ai des champs monChamps du formulaire qui doivent s'afficher ou non selon la valeur sélectionnée dans une balise <html:select />
    J'ai donc utilisé l'attribut "onchange" de cette balise pour déclencher un submit dans le but d'ajouter ou d'enlever les champs monChamps.
    Seulement, le submit ici utilisé renvoie directement sur l'action A, qui passe par la validation du formulaire et me renvoie donc des erreurs.
    L'autre problème qui se cache derrière est que l'action A renvoie sur une page différente de mon formulaire. En gros, il faudrait pouvoir rediriger vers des pages différentes selon la manière dont est déclenchée l'action.

    La manière la plus simple, si elle est applicable, serait d'inclure un formulaire renvoyant sur une action B dans le corps du premier formulaire. Ceci est-il possible?

    Si ça ne l'est pas, est-il possible d'éviter la validation par l'actionForm lors du changement de valeur de la balise select, et comment fait-on pour rediriger vers des pages différentes selon la manière dont on appelle l'action?

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 111
    Points : 128
    Points
    128
    Par défaut
    Bonjour,

    Un peu de code est toujours mieux pour comprendre...
    Sinon tu peux avoir plusieurs forwards pour une mm action dans ton formulaire.
    pour ton select tu peux donc utiliser un forward qui appelle la mm page et qui affiche le champ que tu veux.

    ++

    ---

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 104
    Points : 103
    Points
    103
    Par défaut
    Salut. Voici le code concerné (avec quelques simplifications)

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    <html:form action="A" name="questionForm">
       <table>
          <tbody>
    	 <tr>
    	   <td>Type de la question :</td>
    	      <td>
    		 <html:select property="type" value="${monBean.type}" onchange="document.questionForm.submit()">
    			<html:option value="simpleChoice">choix simple</html:option>
    			<html:option value="bornedMultipleChoices">choix multiple borné</html:option>
    			<html:option value="multipleChoices">choix multiple non borné</html:option>
    		  </html:select>
    		</td>
    	 </tr>
    	 <c:if test='${monBean.type == "bornedMultipleChoices"}' >
    	     <tr>
    		   <td>cardinalité min :</td>
    		   <td><input type="text" name="nbMinRep"/></td>
    		</tr>
    		<tr>
    		   <td>cardinalité max :</td>
    		   <td><input type="text" name="nbMaxRep"/></td>
    		</tr>
    	  </c:if>
    		<tr>
    		    <td>
    			<div id="tooltipEnregistrer"><html:submit value="Enregistrer" /></div>
    			</td>
    		</tr>
    	</tbody>
        </table>
    </html:form>
    Les champs devant être affichés ou non sont les champs de cardinalité en bas du code (enfermés dans la balise if)

    L'enregistrement du formulaire entraine la validation par un actionForm.
    Le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onchange="document.questionForm.submit()"
    est là pour me permettre l'affichage de mes champs selon la valeur de la balise select.

    Ma question est de savoir si je peux mettre un <html:form action="CheckType" name="typeCheck"> juste autour de la balise select, c a d dans le corps de mon premier <html:form /> afin de de différencier les actions


    Sinon pour ce que tu me proposes:
    Oui on peut avoir plusieurs forwards pour une même action, mais comment diriger vers l'un ou l'autre en fonction de la manière dont est appelé l'action?


    J'espère être assez clair, je m'enbrouille moi-même pas mal les pinceaux :'(

  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
    Tu ne peux pas imbriquer des formulaires.

    Par contre, tu pourrais utiliser une DispatchAction en créant par exemple les méthodes select et enregistrer.

    Tu pourrais donc exécuter la fonction Javascript setHidden sur l'évènement onchange du tag html:select avec la valeur select en paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <html:select property="type" value="${monBean.type}" onchange="setHidden('select');document.questionForm.submit();">
    Ainsi, c'est la méthode select de la DispatchAction qui sera exécutée lors de la sélection d'un élément dans la liste déroulante.

    Ensuite, tu ajoutes l'évènement onclick sur le tag submit pour exécuter la fonction Javascript setHidden avec la valeur enregistrer en paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:submit value="Enregistrer" onclick="setHidden('enregistrer');">
    Ainsi, c'est la méthode enregistrer de la DispatchAction qui sera exécutée lors du clic sur le bouton submit Enregistrer.

    Ensuite, pour ne pas faire de validation lors de la sélection d'une valeur dans la liste déroulante, il faudrait mettre validate à false dans le mapping de l'Action dans le struts-config.xml.

    Et il faudrait faire appel à la validation seulement dans la méthode enregistrer comme indiqué dans la FAQ Struts :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	// Validation du formulaire
    	ActionMessages errors = form.validate(mapping, request);
    	if ( !errors.isEmpty() )
    	{
    		this.saveErrors(request, errors);
    		return mapping.getInputForward() ;
    	}
    Et enfin, tu mets les forward désirés dans chaque méthode de la DispatchAction.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 104
    Points : 103
    Points
    103
    Par défaut
    Merci beaucoup c_nvy, ça marche exactement comme je le veux

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Gestion dynamique <html:form action>
    Par javaahm dans le forum Struts 1
    Réponses: 0
    Dernier message: 16/08/2012, 03h51
  2. [html:form] impossible d'utiliser une action
    Par Spiff__ dans le forum Struts 1
    Réponses: 18
    Dernier message: 31/07/2008, 12h21
  3. <html : form action="?">
    Par lextaz33 dans le forum Struts 1
    Réponses: 13
    Dernier message: 22/07/2008, 17h12
  4. Changer une action d'un <html:form..>
    Par phpaide dans le forum Struts 1
    Réponses: 5
    Dernier message: 15/02/2007, 13h41
  5. [HTML] Form - champ disabled
    Par freddyboy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 04/11/2004, 12h14

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