Bonjour,
J’ai un problème avec les redirections en Struts 2.
Voilà ce que j’affiche dans la console (par un Inteceptor de log):
2009-03-25 09:18:22,231 INFO (ValiderMAJCalendrierPeriodeAction:66) - Entrée dans l'action
2009-03-25 09:18:23,137 INFO (ValiderMAJCalendrierPeriodeAction:66) - ResultCodeApresInvoke : TEST
2009-03-25 09:18:23,137 INFO (ValiderMAJCalendrierPeriodeAction:66) - Sortie de l'action
2009-03-25 09:18:23,153 INFO (MAJCalendrierAction:66) - Entrée dans l'action
2009-03-25 09:18:23,293 INFO (MAJCalendrierAction:66) - ResultCodeApresInvoke : input
2009-03-25 09:18:23,293 INFO (MAJCalendrierAction:66) - Sortie de l'action
2009-03-25 09:18:23,309 INFO (ListerCalendriersAction:66) - Entrée dans l'action
2009-03-25 09:18:24,168 INFO (ListerCalendriersAction:66) - ResultCodeApresInvoke : success
2009-03-25 09:18:24,168 INFO (ListerCalendriersAction:66) - l_retour : success
2009-03-25 09:18:24,168 INFO (ListerCalendriersAction:66) - Sortie de l'action
Le cheminement est bon pour le début mais là où j’ai un
2009-03-25 09:18:23,293 INFO (MAJCalendrierAction:66) - ResultCodeApresInvoke : input,
je devrais avoir
2009-03-25 09:18:23,293 INFO (MAJCalendrierAction:66) - ResultCodeApresInvoke : success
Et dans la méthode invoke de l’interceptor, il ne fait rien (à part remplir le resultCode avec la valeur input) pour MAJCalendrierAction alors qu’il appelle tous les interceptor pour les autres actions.
Interceptor de log :
/**
* {@inheritDoc}
* @see com.opensymphony.xwork2.interceptor.AbstractInterceptor#intercept(com.opensymphony.xwork2.ActionInvocation)
*/
public String intercept(ActionInvocation a_actionInvocation) throws Exception
{
/**
* le logger
*/
OULog l_logger = new OULog(a_actionInvocation.getAction().getClass());
/**
* Message affiché au début de l'action
*/
l_logger.info("Entrée dans l'action");
/**
* Appel de l'action
*/
String l_retour = a_actionInvocation.invoke();
l_logger.info("ResultCodeApresInvoke : "+ retour);
/**
* Message affiché à la sortie de l'action
*/
l_logger.info("Sortie de l'action");
return l_retour;
}
ValiderMAJCalendrierPeriodeAction
/**
* createOrUpdate, it creats or update the current Calendrier Periode.
* @throws FwkException any exception.
* @return le forward.
*/
public String createOrUpdate() throws FwkException
{
try
{
…
}
catch (FwkException l_erreur)
{
setParamEntree(IGestionCalendrier.PARAM_PERIODE_INPUT);
setMessageErreur(getText(l_erreur.getMessage()));
return TEST;
}
//for showing message on list identifications screen
setResultModifier("P");
return SUCCESS;
}
sortie en FwkException -> return TEST
Struts config .xml
<action name="validerMAJCalendrierPeriode_*" class="com.inetpsa.cal.actions.calendrier.ValiderMAJCalendrierPeriodeAction" method="{1}">
<result name="TEST" type="redirect-action">
<param name="actionName">majCalPeriode</param>
<param name="method">read</param>
<param name="id">${id}</param>
<param name="annee">${annee}</param>
<param name="periode">${periode}</param>
<param name="messageErreur">${messageErreur}</param>
<param name="paramEntree">${paramEntree}</param>
</result>
<result name="success" type="redirect-action">
<param name="actionName">/listerCalendriers.action</param>
<param name="namespace">/identification</param>
<param name="paramEntree">GESTION</param>
<param name="messageErreur">${messageErreur}</param>
</result>
</action>
-> redirect action vers majCalPeriode dans la méthode read
Struts-config.xml :
On doit donc passer dans la méthode read de la classe MAJCalendrierAction et en fait on n’y passe jamais et on sort directement en forward input et on arrive donc directement dans /listerCalendrier.action
<action name="majCalPeriode"
class="com.inetpsa.cal.actions.calendrier.MAJCalendrierAction"
method="read">
<result>
/WEB-INF/jsp/calendrier/MAJCalPerio.jsp
</result>
<result name="input" type="redirect-action">
<param name="actionName">/listerCalendriers.action</param>
<param name="namespace">/identification</param>
<param name="paramEntree">GESTION</param>
<param name="messageErreur">${messageErreur}</param>
</result>
</action>
public String read() throws FwkException
{
System.out.println("dans la methode read de MAJ");
try
{
…
}
catch (BusinessException l_erreur)
{
setMessageErreur(getText(l_erreur.getMessage()));
return INPUT;
}
return SUCCESS;
}
Problème :
il ne passe jamais dans cette méthode (la trace n’est pas dans la log) et dans aucune méthode de la classe d’ailleurs
Il sort toujours en forward input -> le forward par défaut étant success, je ne comprends pas pourquoi il sort en input
Je ne sais pas si mon problème est bien expliqué donc n'hésitez pas à poser des questions.
Merci
Partager