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 :

LookupDispatchAction - "missing resource in key method map"


Sujet :

Struts 1 Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 44
    Par défaut LookupDispatchAction - "missing resource in key method map"
    Salut

    J'ai un soucis avec l'utilisation du LookupDispatchAction.
    J'ai cherché sur le forum, sur le net et sur la doc de struts mais je ne vois toujours pas où est mon problème...
    J'utilise struts 1.3.8, tomcat, et hibernate 3.

    En gros, j'ai 2 formulaires à la suite, chaque formulaire a un submit qui pointe vers une action différente mais ont le même ActionForm (ici FormulaireAction) en extends LookupDispatchAction.

    Voilà les sources :

    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
    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
     
    <struts-config>
     
    	<form-beans>
    		<form-bean 
    			name="frmPersonne"       
    		  	type="org.apache.struts.validator.DynaValidatorForm" 
    		  >                    
    		  	<form-property name="pseudo" type="java.lang.String" initial="" />
    		  	<form-property name="mdp" type="java.lang.String" initial="" />
    		  	<form-property name="nom" type="java.lang.String" initial="" />
    		  	<form-property name="prenom" type="java.lang.String" initial="" />
    		  	<form-property name="age" type="java.lang.String" initial="" />
    		</form-bean> 
     
    		<form-bean 
    			name="frmPersonne2"       
    		  	type="org.apache.struts.validator.DynaValidatorForm" 
    		  >                    
    		  	<form-property name="adresse" type="java.lang.String" initial="" />
    		  	<form-property name="cp" type="java.lang.String" initial="" />
    		  	<form-property name="ville" type="java.lang.String" initial="" />
    		</form-bean>                      
     
    	</form-beans>                     
     
    	<action-mappings>                 
    		<action                   
    			path="/validerFormulaire1"   
    			parameter="monAction"    
    			name="frmPersonne" 			
    			scope="session"
    			validate="true"
    			input="/erreurs.do"
    			type="FormulaireAction"
    		>
    			<forward name="formSuivant" path="/formulaire2.do" />
    		</action>
     
    		<action 
    			path="validerFormulaire2"
    			parameter="monAction2"
    			name="frmPersonne2"
    			scope="session"
    			validate="true"
    			input="/erreurs.do"
    			type="FormulaireAction"
    		>
    			<forward name="reponse" path="/resultat.do" />
    		</action>
     
    		<action 
    			path="/erreurs"
    			parameter="/vues/erreurs.personne.jsp"
    			type="org.apache.struts.actions.ForwardAction" 
    		/>
     
    		<action
    			path="/formulaire"
    			parameter="/vues/formulaire.personne.jsp"
    			type="org.apache.struts.actions.ForwardAction"
    		/>
     
    		<action 
    			path="/formulaire2"
    			parameter="/vues/formulaire2.personne.jsp"
    			type="org.apache.struts.actions.ForwardAction"
    		/>			
     
    		<action 
    			path="/resultat"
    			parameter="/vues/resultat.personne.jsp"
    			type="org.apache.struts.actions.ForwardAction"
    		/>
    	</action-mappings>
     
    	<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
    		<set-property
    			property="pathnames"
    			value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"
    		/>
    	</plug-in>
     
    	<message-resources parameter="personneressources" />
     
    </struts-config>
    FormulaireAction.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
     
    public class FormulaireAction extends LookupDispatchAction  {
     
     
    	protected Map<String, String> getKeyMethodMap() {
    		   Map<String, String> map = new HashMap<String, String>();
    		   map.put("button.suiv", "suiv");
    		   map.put("button.finir", "finir");
    		  return map;
    	}
     
    	/** ou : 
            protected Map getKeyMethodMap() {
                       Map map = new HashMap();
                       map.put("button.suiv", "suiv");
                       map.put("button.finir", "finir");
                      return map;
            }**/
     
    	public ActionForward suiv(ActionMapping mapping, ActionForm form, 
    			HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException {
     
     
    		// code...
     
    		return mapping.findForward("formSuivant");
     
    	}
     
     
    	public ActionForward finir(ActionMapping mapping, ActionForm form, 
    			HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException {
     
     
    		// code...
     
    		return mapping.findForward("reponse");
     
    	}
     
    }
    formulaire.personne.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
     
    <html:form action="/validerFormulaire1">
    	...
    	<table>
    		<tr>
    			<td>
    				<html:submit property="monAction" value="Valider">
    				<bean:message key="button.suiv" />
    				</html:submit>
    			</td>
    			<td><html:reset value="Rétablir"/></td>
    			<td><html:button property="btnEffacer" value="Effacer" onclick="effacer()"/></td>
    		</tr>
    	</table>
    	</html:form>
    formulaire2.personne.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
     
    <html:form action="/validerFormulaire2">
    	...	
    	<table>
    		<tr>
    			<td>
    				<html:submit property="monAction2" value="Valider">
    				<bean:message key="button.finir" />
    				</html:submit>
    			</td>
    			<td><html:reset value="Rétablir"/></td>
    			<td><html:button property="btnEffacer" value="Effacer" onclick="effacer()"/></td>
    		</tr>
    	</table>
    	</html:form>
    personnesressources.properties :
    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
     
    errors.header=<ul>
    errors.footer=</ul>
     
     
    # Messages d'erreur de Struts Validator
    # la clé est prédéfinie et ne doit pas être changée
    # le msg d'erreur associé est libre
    # le msg peut avoir jusqu'à 4 paramètres {0} à {3}
     
    errors.required=<li>Le champ [{0}] doit être renseigné.</li>
    errors.minlength=<li>Le champ [{0}] doit avoir au moins {1} caractère.</li>
    errors.maxlength=<li>Le champ [{0}] ne peut avoir plus de {1} caractères.</li>
    errors.invalid=<li>Le champ [{0}] est incorrect.</li>
     
    errors.byte=<li>{0} doit être un octet.</li>
    errors.short=<li>{0} doit être un entier court.</li>
    errors.integer=<li>{0} doit être un entier.</li>
    errors.long=<li>{0} doit être un entier long.</li>
    errors.float=<li>{0} doit être un réel simple.</li>
    errors.double=<li>{0} doit être un réel double.</li>
     
    errors.date=<li>{0} n'est pas une date valide.</li>
    errors.range=<li>{0} doit être dans l'intervalle {1} à {2}.</li>
    errors.creditcard=<li>{0} n'est pas un numéro de carte valide.</li>
    errors.email=<li>{0} n'est pas une adresse électronique valide.</li>
     
     
    personne.pseudo=pseudo
    personne.mdp=mdp
    personne.nom=nom
    personne.prenom=prenom
    personne.age=age
     
    personne.adresse=adresse
    personne.cp=cp
    personne.ville=ville
     
    # clés LookupDispatchAction
    button.suiv=suiv
    button.finir=finir

    J'ai beau relire et relire le code, je ne vois pas de problème.

    Voilà l'erreur dans le log :

    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
     
    24 oct. 2007 10:28:35 org.apache.catalina.core.StandardWrapperValve invoke
    GRAVE: "Servlet.service()" pour la servlet action a généré une exception
    javax.servlet.ServletException: Action[/validerFormulaire1] missing resource in key method map
    	at org.apache.struts.actions.LookupDispatchAction.getLookupMapName(LookupDispatchAction.java:232)
    	at org.apache.struts.actions.LookupDispatchAction.getMethodName(LookupDispatchAction.java:272)
    	at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:157)
    	at org.apache.struts.actions.LookupDispatchAction.execute(LookupDispatchAction.java:146)
    	at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
    	at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
    	at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
    	at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
    	at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
    	at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
    	at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
    	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
    	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
    	at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:852)
    	at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:584)
    	at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1508)
    	at java.lang.Thread.run(Unknown Source)

  2. #2
    Expert confirmé

    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
    Par défaut
    Je ne sais pas si ton erreur vient de là mais il y a normalement à un ordre à respecter dans les balises du struts-config.xml.
    Il faut notamment mettre la balise message-resources avant la balise plug-in.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 44
    Par défaut
    Apparement ce n'est pas ça, j'ai toujours la même erreur.

    Le même fichier .properties peut bien faire cohabiter plusieurs "éléments" hein ?
    Dans mon cas, les messages d'erreurs et les clés pour le lookupdispatchaction.

  4. #4
    Expert confirmé

    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
    Par défaut
    Citation Envoyé par mastamx Voir le message
    Le même fichier .properties peut bien faire cohabiter plusieurs "éléments" hein ?
    Dans mon cas, les messages d'erreurs et les clés pour le lookupdispatchaction.
    Bien sûr.

    Par contre, il est surprenant de lier une même Action à deux form-beans différents.
    En principe, on utilise la LookupDispatchAction quand on a plusieurs boutons submit sur un même formulaire.

    Pourquoi ne crées-tu pas deux Actions différentes puisque tu as deux formulaires différents ?
    Je ne vois pas bien l'intérêt d'utiliser une LookupDispatchAction dans ton cas et je ne suis d'ailleurs pas certaine que ça puisse fonctionner ainsi.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 44
    Par défaut
    Bah en fait je faisais des tests pour enchainer plusieurs formulaires et stocker les données d'abord en session et ensuite en bdd (à la fin des formulaires après confirmation de l'utilisateur).

    Au début, j'avais un ActionForm différent pour chaque formulaire, mais une fois que j'avais validé le deuxième formulaire, je perdais les données du premier en session, et ainsi de suite.
    Du coup à la fin, je me retrouvais seulement avec les données du dernier formulaire validé.
    J'avais surement fait des erreurs dans le code pour que ça me fasse ça mais après je suis tombé par hasard sur le LookupDispatchAction et il m'avait semblé que c'était peut être une solution à mon "problème".

    Je devais avoir un truc du genre :

    - 2 formulaires en scope="session"
    - ActionForm1 extends Action qui fait des request.setAttribute(...) du premier formulaire
    - ActionForm2 extends Action qui fait des request.setAttribute(...) du deuxième formulaire
    - une page jsp finale qui récapitule les infos des 2 formulaires avec des request.getAttribute(...) mais ça ne fonctionnait pas pour les données du premier formulaire.


    Je vais essayer de recommencer, et de trouver la solution.

Discussions similaires

  1. Réponses: 5
    Dernier message: 25/06/2007, 21h40
  2. Réponses: 10
    Dernier message: 27/01/2007, 13h54
  3. [message.properties]missing message for key !
    Par jeb001 dans le forum Struts 1
    Réponses: 3
    Dernier message: 16/11/2006, 22h18
  4. Struts layout affichage tableaux erreur: Missing resources
    Par bous_saad317 dans le forum Struts 1
    Réponses: 1
    Dernier message: 24/10/2006, 14h09
  5. Réponses: 7
    Dernier message: 19/10/2006, 14h24

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