OVH Cloud OVH Cloud

[Struts] DispatchAction et parameter

1 réponse
Avatar
David LE BOURGEOIS
Bonsoir.

Dans une classe FooDispatchAction (qui étend DispatchAction), je
cherche à tester si le paramètre passé ne correspond pas à une méthode
existante.

La méthode unspecified héritée n'est appelée que si le paramètre n'est
pas spécifié. Or dans mon cas, il l'est mais pas avec une valeur
correspondant à une méthode.

Donc, je me suis penché sur l'attribut methods. Mais la Hashmap n'est
alimentée qu'au cours des différents appels. Par conséquent, impossible
de parcourrir la liste des méthodes pour la comparer au paramètre.

Enfin, j'ai essayé de capturer l'exception lancée par la méthode
dispatchMethod. C'est-à-dire, dans la méthode dispatchMethod de la
classe FooDispatchAction, je capture l'exception levée par un
super.dispatchMethod(...).
Cependant, lorsqu'aucune méthode n'est trouvée pour un paramètre,
dispatchMethod ne lève pas d'exception mais retourne null.
Je teste donc si le retour vaut null ou non, et décide de retourner le
forward adéquat. Le problème que je rencontre alors, est qu'une fois
l'appel à super.dispatchMethod effectué, le return
mapping.findForward(...) ne fonctionne plus (page introuvable dans le
navigateur). Et si je remplace super.dispatchMethod(...) par null, le
forward fonctionne.

Le code suivant provoque une page introuvable après le forward vers
accueil :

ActionForward f = super.dispatchMethod(...);
if (f == null) {
return mapping.findForward("accueil");
} else {
return f;
}

Alors que dans ce code, le forward vers accueil fonctionne :

ActionForward f = null;
if (f == null) {
return mapping.findForward("accueil");
} else {
return f;
}

Avez-vous une idée sur le pourquoi du comment ? Est-ce que
super.dispatchMethod modifie le mapping ?

Y'a-t-il une autre manière de procéder ?


Merci pour vos idées.

--
David LE BOURGEOIS

1 réponse

Avatar
David LE BOURGEOIS
Problème résolu :

Il fallait bien utiliser ce principe, mais dans la méthode execute de la
class DispatchAction, et non pas dans la méthode dispatchMethod.

Merci à ceux qui m'ont lu ;-)

--
David LE BOURGEOIS