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 2 Java Discussion :

Plusieurs boutons dans un form et ie 6/7.


Sujet :

Struts 2 Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 129
    Par défaut Plusieurs boutons dans un form et ie 6/7.
    Bonjour,

    Je suis aujourd'hui face à un problème assez bloquant pour moi puisque mon application dois tourner sur IE6/7 et FF.

    Voici mon problème : J'ai en faite un formulaire contenant deux boutons, l'un vidant les champs du formulaire (raz) et l'autre sauvegardant les données du formulaire (créer).
    Seulement, sous IE, seul une action est prise en compte. Ce qui est drôle, c'est que peu importe le bouton sur lequel je clic, ce sera toujours la même action (et donc méthode de ma classe Action) qui sera appelée.
    Quand les deux boutons sont présents et que je clic => méthode Raz
    Si j'enlève le bouton "raz", ma méthode créer est bien appelé, ce qui me laisse penser qu'IE ne gère qu'une seule action dans un formulaire.

    L'application est en thème "css_xhtml"

    Voici le code, si cela peux vous eclairer :

    Ecran utilisateur.jsp
    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
    <s:div cssClass="blocCaracteristique" id="ajoutDeComposant">
    	<s:div cssClass="nom"><s:text name="stitle_utilisateur_create"/></s:div>
    	 <s:actionerror cssClass="actionError" />
    	<s:form action="user" method="POST" id="form" >
             <span class="form_label"><s:text name="lbl_utilisateur_login"/></span> 
         	 <s:textfield name="login" cssClass="taille200" />
             <span class="form_label"><s:text name="lbl_utilisateur_password"/></span> 
             <s:textfield name="password" cssClass="taille200" />
             <span class="form_label"><s:text name="lbl_utilisateur_mail"/></span> 
             <s:textfield name="mail" cssClass="taille200" />
            <s:actionmessage cssClass="actionMessage"/>
             <s:div cssClass="right">
            <span class="action"><s:submit  type="button" method="save"><s:param name="value"><s:text name="btn_create"/></s:param></s:submit></span>
    		</s:div>
    		  <s:div cssClass="right">
    		 <span class="action"><s:submit type="button" method="raz" ><s:param name="value"><s:text name="btn_raz"/></s:param></s:submit></span>
    		</s:div>
     
    	</s:form>
    		</s:div>
    		  <br/>
    Classe utilisateurAction.java
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    public class UtilisateurAction extends ActionSupport {
     
     
    	private UtilisateurService service;
    	private boolean erreur = false;
    	private String login;
    	private String password;
    	private String mail;
     
    ...
     
    	public String save(){
    		try {
    			if(login.equals("")){
    				erreur = true;
    				addActionError("Saisie du login obligatoire ");
    			}
    			if(password.equals("")){
    				erreur = true;
    				addActionError("Saisie du mot de passe obligatoire ");
    			}else if(password.length() < 6){
    				erreur = true;
    				addActionError("Le mot de passe doit contenir 6 caractères minimum ");
    			}
     
    			if(!erreur){
    				service.createUser(login, password,"1");
    				addActionMessage("Utilisateur créé avec succès !");
     
    				return SUCCESS;
    			}
     
     
    		} catch (Exception e) {
     
    			e.printStackTrace();
    		}
    		return SUCCESS;
     
    	}
     
    	public String raz(){
    		System.out.print("RAZ");
    		setLogin("");
    		setPassword("");
    		setMail("");
     
    		return SUCCESS;
    	}
     
    ...
    actions.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    		...
     
          	<action name="user" class="userAction" >
        		<result  name="success">/pages/Accueil.jsp</result>
    		</action>
    ...
    Merci d'avance pour votre aide !

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 111
    Par défaut
    Slt,
    Effectivement il me semble que IE gère qu'une action par formulaire.
    Essaies ça :
    1: Supprimer l'attribut action dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <s:form action="user" method="POST" id="form" >
    2: Supprimer l'attribut type dans tes deux boutons submit
    3: Ajouter un attribut action dans tes deux boutons.

    Par ailleur,
    Struts2 propose une méthode assez simpliste utilisant un fichier xml, pour vérifier la saisie et le contrôle des differents champs d'un formulaire.
    Cela t'évite de faire un controle dans ton action comme tu l'as fait ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if(login.equals("")){
    				erreur = true;
    				addActionError("Saisie du login obligatoire ");
    			}
    			if(password.equals("")){
    				erreur = true;
    				addActionError("Saisie du mot de passe obligatoire ");
    			}else if(password.length() < 6){
    				erreur = true;
    				addActionError("Le mot de passe doit contenir 6 caractères minimum ");
    			}

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 129
    Par défaut
    Merci pour la réponse.

    Je vais tester ça !

    Pour la validation, j'étais en faite parti à la base sur les validations par annotations mais j'ai rencontré quelques problèmes (et mal géré sous ie), je me suis donc retranché sur ce système.
    Je vais voir pour la validation par fichier xml ... ce qui me dérange c'est juste le nombre important de fichiers de validation que j'aurais à la fin du développement de mon application !

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 94
    Par défaut
    Bonjour,
    je me permet d'intervenir dans la conversation car je rencontre exactement le même problème, c'est à dire que sous ie6 mes actions ne sont pas prises en compte, c'est toujours l'action par défaut qui est lancée.

    J'ai donc essayé la proposition de saziley, mais ça ne change rien, et toi de ton coté M€lK!oR ça donne quoi ?

    Par contre moi c'est relativement urgent, donc je suis prêt à prendre toute les solutions(propres et non propres) pour pouvoir lancer différentes actions à partir d'un même formulaire et que ça marche sous ie6.

    Ce qui m'intrigue c'est qu'il y a très peu de référence à ce problème sur internet, ie6 serait t-il mort et enterré pour struts2....

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 129
    Par défaut
    J'ai testé cette solution et malheureusement cela ne donne rien. Je ne suis même pas parvenu à faire fonctionner les boutons.

    Je garde un œil sur ce poste, au cas ou tu trouverais une solution lolo. Tu peux jeter un oeil sur le projet showcase fourni par struts 2. Il contourne le problème en utilisant un bouton et un lien.

    Tiens moi au courant.

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 94
    Par défaut
    Je viens de parcourir les exemples showcase, cependant je n'ai pas trouvé des boutons + liens pour valider un formulaire...

    Tu me montrer un exemple ?

    Car en plus de faire une action il faut que ça submit le formulaire...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 129
    Par défaut
    Il font ça pour des changements de page en faite ... j'étais plus orienté vers mon cas quand j'ai posté mon dernier message (mon bouton RAZ initialise juste les champs), le lien pourrait juste recharger la page.

    Donc en faite, j'ai pas vu d'exemple ou c'est appliqué.

    Si tu connais un moyen d'appeler un méthode spécifique depuis une balise <a> (a la manière du method=""), ca pourrait être possible via le onclick et du code javascript pour soumettre un formulaire donné.
    Tu connais ça ?

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 129
    Par défaut
    J'ai résolu mon problème.

    Je suis passé finalement par un lien en dehors du formulaire, qui se charge juste de mettre des attributs de ma classe Action à vide.

    Voici le code de la jsp :

    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
    	<s:form action="user" method="POST" id="form" >
             <span class="form_label"><s:text name="lbl_utilisateur_login"/></span> 
         	 <s:textfield name="newUser.login" cssClass="taille200" />
             <span class="form_label"><s:text name="lbl_utilisateur_password"/></span> 
             <s:textfield name="newUser.password" cssClass="taille200" />
             <span class="form_label"><s:text name="lbl_utilisateur_mail"/></span> 
             <s:textfield name="newUser.mail" cssClass="taille200" />
             <span class="form_label"><s:text name="lbl_utilisateur_droit"/></span> 
            <s:select list="droits"  listKey="libelle" listValue="libelle" headerKey="-" headerValue="-" name="droitUser"/>
         	<s:actionmessage cssClass="actionMessage"/>
     
     
            <s:div cssClass="right">
            <span class="action"><s:submit type="button" method="save"><s:param name="value"><s:text name="btn_create"/></s:param></s:submit></span>
    		</s:div>
    	</s:form>
     
    	<s:div cssClass="right">
    		 <span class="action"><a href="<s:url action="user_raz"/>"><s:text name="btn_raz"/></a></span>
    		</s:div>
    	</s:div>
    Pour la soumission de formulaire, je pense qu'il est possible de faire la même chose avec un onClick="javascript:form.submit" (la syntaxe est fausse)

    Cherche de ce coté Lolo, si tu trouves une solution à cela, ça m'intéresse quand même.

    Merci pour votre aide.

  9. #9
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 94
    Par défaut
    Cool pour toi

    Alors moi j'ai essayé avec un lien type href associé a une fonction javascript
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a onclick="navSubmit('ExportAction', '/monAppli/ExportAction!afficherPage1.action');">TEST</a>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function navSubmit(form, page) {
        var fObj = document.forms[form];
        if (fObj == null) {
            alert("Error: Form named '" + form + "' does not exist.");
            return;
        }
        fObj.action = page;
        fObj.submit();
    }
    Et ça ne marche toujours pas, il reste sur la même action par défaut...

    Donc je suis toujours bloqué... , any ideas...

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 129
    Par défaut
    Je te met ici mon fichier actions.xml.

    Dans ton javascript, passe juste le nom de ton action, pas la méthode, le mapping fera le reste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <action name="user_*" method="{1}" class="userAction">
       			<result name="success">...</result>
    		</action>
    Pour ton cas, tu auras quelque chose comme action="ExportAction_afficherPage1"

  11. #11
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 94
    Par défaut
    Cela ne change rien, et pour cause...
    je viens en effet de me rendre compte que peu importe ce que je met dans l'action de soumission, il recharge la même page avec toujours la même action.

    Ce qui est "bizarre" c'est que dans la barre d'adresse ie6 j'ai bien l'url de ma nouvelle action... il y a un truc qui m'échappe dans le couple ie6 / struts2, je suppose que ie6 envoie des infos erronés a struts, maintenant il faudrait pouvoir mettre la main là dessus.

    en tout cas merci de ton aide... nous vaincrons !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/09/2012, 22h10
  2. plusieurs boutons dans une meme form
    Par toutou2000 dans le forum Struts 1
    Réponses: 6
    Dernier message: 20/08/2008, 13h20
  3. Réponses: 12
    Dernier message: 30/03/2006, 21h55
  4. [MySQL] plusieurs bouton dans 1 form
    Par vincedjs dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 16/02/2006, 10h40
  5. Plusieurs boutons dans un formulaire
    Par kcizth dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 03/01/2006, 15h42

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