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 :

Problème de forward


Sujet :

Struts 1 Java

  1. #1
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 49
    Par défaut Problème de forward
    Hello

    Je reviens sur un soucis de mapping suite au "remapping" de l'appli que j'ai effectué hier... dans une de mes actions, je passe deux fois dans la méthode execute, et je suis incapable de trouver la raison de ce double passage.

    J'ai donc, dans mon struts-config.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-bean name="chairmanSendEmailForm" type="formBeans.ChairmanSendEmailForm"/>
    ...
    <action path="/chairmanWriteEmailPage"
         parameter="/jsp/chairman/chairmanWriteEmail.jsp"
         type="org.apache.struts.actions.ForwardAction"/>
     
    <action	path="/chairmanSendEmail"
         input="/chairmanWriteEmailPage.do" 
         name="chairmanSendEmailForm" 
         type="actions.ChairmanSendEmailAction" 
         validate="true">
         <forward name="mailOK" path="/chairman.do"/>
         <forward name="mailNotOK" path="/chairmanWriteEmailPage.do"/>
    </action>
    Rien d'exceptionnel... L'action "chairmanWriteEmailPage" affiche la jsp permettant la saisie d'un mail et contient un formulaire de saisie basique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:form method="post" action="chairmanSendEmail.do" >
    Une fois le formulaire validé via "ChairmanSendMailForm.java", je suppose donc que struts passe dans le fichier "ChairmanSendEmailAction.java" que je spécifie dans le struts-config.xml...
    Voici grosso modo le contenu de cette action (très raccourcie ^^) :
    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
    public ActionForward execute.... {
    ... //récupération des différents attributs session / requête en cours
    ArrayList<String> to = new ArrayList<String>();
    Connection cnx = source.getConnection(); //connexion base
    ... ps.executeQuery(); ... //exécution requête, récupération résultat etc...
    [...]
    while (rs.next()) {
         if (rs.getString(1)!=null)
              //ajout du résultat 1 dans l'arraylist...
              to.add(rs.getString(1));
    }
    //suivi d'un test de l'array list...
    for (int i=0; i<to.size(); i++)
         System.out.println(to.get(i).toString());
    }
    A partir d'ici le problème est simple... A la soumission du formulaire, mon arrayList s'affiche deux fois... et je ne comprends pas pourquoi, cela signifie qu'il passe DEUX fois dans la méthode execute() de l'action... J'ai testé, il passe également deux fois dans le formBean...

    Je ne vois pas l'erreur de forward, qqun pourrait m'aiguiller ?

    Merci beaucoup

  2. #2
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 49
    Par défaut
    Pour info, je n'ai pas de javascript dans ma page jsp ou ailleurs, mis a part un test de soumission de formulaire ( onsubmit="alert('submit'); ) qui ne pop qu'une seule fois... Et pas deux.

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Par défaut
    Citation Envoyé par moulette85
    A partir d'ici le problème est simple... A la soumission du formulaire, mon arrayList s'affiche deux fois...
    euh, peux-tu nous indiquer le code de la jsp qui affiche la liste?
    Citation Envoyé par moulette85
    et je ne comprends pas pourquoi, cela signifie qu'il passe DEUX fois dans la méthode execute() de l'action...
    euh, la relation de cause à effet que tu stipules n'est pas vraie...
    Si tu mets un point d'arrêt dans la méthode execute, es-tu sûr que tu y passes 2 fois?
    Citation Envoyé par moulette85
    J'ai testé, il passe également deux fois dans le formBean...
    comment fais-tu ce test?

  4. #4
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 49
    Par défaut
    Alors...

    Pour la jsp, elle n'affiche rien, c'est une simple redirection vers la page d'"accueil" du compte avec un attribut de session pour spécifier si l'envoi du mail est bien envoyé. Donc, je n'affiche la liste que dans ma méthode execute() de l'action, en sysout(), dans la console pour vérification dans un premier temps.

    Comment j'ai fait mes tests eh bien... Deux sysout() (je sais c'est moche ><) :
    un dans le formBean > "Passage formulaire" (dans la méthode validate())
    un dans le action > "Passage action" (dans la méthode execute()).

    Ce n'est pas dans un while / for etc, je précise, ce n'est pas un problème de boucle... Le résultat de ce test sur submit du formulaire est le suivant :

    Passage formulaire
    Passage action
    Passage formulaire
    Passage action

    J'en ai donc déduit qu'il y passait deux fois...

  5. #5
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 49
    Par défaut
    Je confirme que c'est bien dans l'action, j'ai le même problème sur un autre formulaire qui envoie deux fois le même mail. . .

    Quelque chose cloche dans mon struts-config.xml ?

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Par défaut
    peux-tu mettre ton fichier struts-config.xml un peu plus complet : les actions définies, car je ne vois pas où redirige l'action "/chairman.do" lors de la réussite de la saisie de l'email....

  7. #7
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 49
    Par défaut
    Voila le struts complet. J'ai mis en gras ce qui est utile =)

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
                                   "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
    <struts-config>
      <form-beans type="org.apache.struts.action.ActionFormBean">
        <form-bean name="loginForm" type="formBeans.LoginForm"/>
        <form-bean name="inscriptionForm" type="formBeans.InscriptionForm"/>
        <form-bean name="addPaperForm" type="formBeans.AddPaperForm"/> 
        <form-bean name="mailToChairForm" type="formBeans.MailToChairForm"/>     
        <form-bean name="uploadFileArticleForm" type="formBeans.UploadFileArticleForm"/>      
        <form-bean name="chairmanWriteEmailForm" type="formBeans.ChairmanWriteEmailForm"/>            
    	<form-bean name="chairmanSendEmailForm" type="formBeans.ChairmanSendEmailForm"/>            	
        <form-bean name="addPCMemberForm" type="formBeans.AddPCMemberForm"/>                
      </form-beans>
      <global-exceptions/>
      <global-forwards>
    	<forward name="goToLogin" path="/loginPage.do"/>
      </global-forwards>
      <action-mappings type="org.apache.struts.action.ActionMapping">
      
    	<action
    		path="/init"
    		type="actions.InitAction">
    		<forward name="login" path="/jsp/login.jsp"/>	
    	</action>
    	
    	<action 
    		path="/login"
    		name="loginForm"
    		validate="true"
    		input="/loginPage.do"		
    		type="actions.LoginAction">
    		<forward name="auteur" path="/auteur.do"/>
    		<forward name="relecteur" path="/relecteur.do"/>
    		<forward name="chairman" path="/chairman.do"/>	    
    		<forward name="errorLogin" path="/loginPage.do"/>	    		
    	</action>
    
    	<action 
    		path="/loginPage"
    		parameter="/jsp/login.jsp"
    		type="org.apache.struts.actions.ForwardAction"/>
    
    	<action 
    		path="/inscriptionPage"
    		parameter="/jsp/auteur/inscription.jsp"
    		type="org.apache.struts.actions.ForwardAction"/>  
    
       	<action 
       		path="/inscription"    	
       		input="/inscriptionPage.do" 
       		name="inscriptionForm" 
       		type="actions.InscriptionAction" 
       		validate="true">
    		<forward name="auteur" path="/auteur.do"/>
    		<forward name="errorInscription" path="/inscriptionPage.do"/>
    	</action>   		
    
    	<action 
    		path="/auteur"
    		parameter="/jsp/auteur/index.jsp"
    		type="org.apache.struts.actions.ForwardAction"/>
    
    	<action 
    		path="/relecteur"
    		parameter="/jsp/relecteur/index.jsp"
    		type="org.apache.struts.actions.ForwardAction"/>
    	
    	<action 
    		path="/chairman"
    		parameter="/jsp/chairman/index.jsp"
    		type="org.apache.struts.actions.ForwardAction"/>  
      
        <action 
        	path="/logout" 
        	type="actions.LogoutAction">
        	<forward name="logout" path="/loginPage.do"/>	
       	</action>
       	
       	<action 
       		path="/viewPapers"
    		parameter="/jsp/auteur/viewPapers.jsp"
    		type="org.apache.struts.actions.ForwardAction"/>
    
    	<action 
    		path="/viewAbstract" 
    		parameter="/jsp/auteur/viewAbstract.jsp"
    		type="org.apache.struts.actions.ForwardAction"/>
    
    	<action 
    		path="/downloadArticle" 
    		parameter="/jsp/auteur/downloadArticle.jsp"
    		type="org.apache.struts.actions.ForwardAction"/>
    	
    	<action
    		path="/uploadArticlePage" 
    		parameter="/jsp/auteur/uploadArticle.jsp"
    		type="org.apache.struts.actions.ForwardAction"/>
    
        <action 
    		path="/uploadFileArticle"     
        	input="/uploadArticlePage.do" 
        	name="uploadFileArticleForm" 
        	type="actions.UploadFileArticleAction" 
        	validate="true">    
    		<forward name="upOK" path="/viewPapers.do"/>
    		<forward name="upNotOK" path="/uploadArticlePage.do"/>     	
        </action>
    
    	<action 
    		path="/addPaperPage" 
    		parameter="/jsp/auteur/addPaper.jsp"
    		type="org.apache.struts.actions.ForwardAction"/>
    
       	<action 
       		path="/addPaper"    	
       		input="/addPaperPage.do" 
       		name="addPaperForm" 
       		type="actions.AddPaperAction" 
       		validate="true"> 
    		<forward name="addOK" path="/viewPapers.do"/>
    		<forward name="addNotOK" path="/addPaperPage.do"/>   		
    	</action>
    
    	<action 
    		path="/mailToChairPage" 
    		parameter="/jsp/auteur/mailToChair.jsp"
    		type="org.apache.struts.actions.ForwardAction"/>
    
        <action 
    	    path="/mailToChair" 
        	input="/mailToChair.do" 
        	name="mailToChairForm" 
        	type="actions.MailToChairAction" 
        	validate="true">        
    		<forward name="mailOK" path="/auteur.do"/>
    		<forward name="mailNotOK" path="/mailToChair.do"/>   		    	
        </action>
        
       	<action 
    		path="/chairmanSettings" 
    		parameter="/jsp/chairman/settings.jsp"
    		type="org.apache.struts.actions.ForwardAction"/>
    
       	<action 
    		path="/chairmanPapers" 
    		parameter="/jsp/chairman/papers.jsp"
    		type="org.apache.struts.actions.ForwardAction"/>
    
    	<action 
    		path="/listPapers" 
    		type="actions.ListPapersAction">	
    		<forward name="paramOK" path="/listPapersPage.do"/>
    		<forward name="paramNotOK" path="/chairmanPapers.do"/>
    	</action>		
    	
    	<action
    		path="/listPapersPage"
    		parameter="/jsp/chairman/listPapers.jsp"
    		type="org.apache.struts.actions.ForwardAction"/>	
    
       	<action 
    		path="/chairmanCommittees" 
    		parameter="/jsp/chairman/committees.jsp"
    		type="org.apache.struts.actions.ForwardAction"/>
    
        <action
    		path="/addOtherAuthor"
    		type="actions.AddOtherAuthorAction">
    		<forward name="login" path="/jsp/login.jsp"/>
    	</action>
    	
    	<action
    		path="/delOtherAuthor"
    		type="actions.DelOtherAuthorAction">
    		<forward name="login" path="/jsp/login.jsp"/>
    	</action>
        	
       	<action 
    		path="/chairmanAssignements" 
    		parameter="/jsp/chairman/assignements.jsp"
    		type="org.apache.struts.actions.ForwardAction"/>
    
    	<action
    		path="/chairmanEmail"
    		type="actions.ChairmanEmailAction">
    		<forward name="choiceOK" path="/jsp/chairman/chairmanEmail.jsp"/>	
    	</action>
    
    	<action 
    	    path="/chairmanWriteEmail" 
        	input="/chairmanWriteEmail.do" 
        	name="chairmanWriteEmailForm" 
        	type="actions.ChairmanWriteEmailAction" 
        	validate="true">        
    		<forward name="mailOK" path="/chairmanWriteEmailPage.do"/>
    		<forward name="mailNotOK" path="/chairmanWriteEmail.do"/>   		    	
        </action>
        
      	<action 
    		path="/chairmanWriteEmailPage" 
    		parameter="/jsp/chairman/chairmanWriteEmail.jsp"
    		type="org.apache.struts.actions.ForwardAction"/>
    		
    	<action
    	 	path="/chairmanSendEmail"
    		input="/chairman.do" 
        	name="chairmanSendEmailForm" 
        	type="actions.ChairmanSendEmailAction" 
        	validate="true">        
    		<forward name="mailOK" path="/chairman.do"/>
        </action>	 	
        
      </action-mappings>
      
      <controller processorClass="org.apache.struts.tiles.TilesRequestProcessor"/>
      
      <message-resources parameter="messages"/>
      <message-resources parameter="config" key="config"/>
      
      <plug-in className="org.apache.struts.tiles.TilesPlugin">
        <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml"/>
        <set-property property="moduleAware" value="true"/>
      </plug-in>
      
      <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
        <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
      </plug-in>
    </struts-config>
    /chairman.do redirige vers l'index.jsp du compte =)

  8. #8
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 49
    Par défaut
    Bon... Après pas mal de recherches (il n'est jamais que 22H09 ^^), j'ai fini par trouver le problème. Il se nomme "Double submit" et est donc relativement répandu sur le web...

    Donc après moultes recherche, j'ai modifié plusieurs trucs, notamment viré les
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <action 
    		path="/loginPage"
    		parameter="/jsp/login.jsp"
    		type="org.apache.struts.actions.ForwardAction"/>
    Pour les remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <action 
    		path="/loginPage"
    		forward="/jsp/login.jsp"/>
    Peut etre est ce plus propre je ne sais pas...

    Et surtout, sur chaque action appelant un formulaire, j'ai rajouté dans chaque balise "forward", en plus du name et du path, un redirect="true" qui ma foi joue bien son rôle puisque visiblement, cela fonctionne correctement maintenant.

    Cela n'empêche pas de bien considérer cette erreur du double submit visiblement très répondu et SOUVENT sans réponse... Par exemple, sous IE 6, le problème était transparent et ne nuait pas, sous FF2, il passait deux fois, sous Opera, passait deux fois dans le validate() et une fois ou deux dans l'action... Bref, un bug un peu bizarre...

    Je mets le tag "résolu" mais vais continuer mes divers tests pour bien tout vérifier...

    Merci de vos réponses (enfin Matt surtout ^^)

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

Discussions similaires

  1. problème de forward
    Par khayri dans le forum Struts 1
    Réponses: 1
    Dernier message: 17/04/2007, 10h54
  2. [Turtle] problème avec forward
    Par julien.63 dans le forum Général Python
    Réponses: 12
    Dernier message: 08/03/2007, 17h51
  3. [Servlet] Problème niveau Forward
    Par helter_skelter dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 10/08/2006, 21h23
  4. [Servlet] Problème requestDispacher.forward et CSS
    Par K-Kaï dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 06/07/2006, 12h58
  5. [JSP] Problème avec forward et param
    Par seb55555 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 13/12/2004, 12h13

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