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:
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:
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:
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:
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:
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:
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) |