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 :
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
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>
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
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"); } }
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="/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>
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 <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>
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)
Partager