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] Problème avec soumission par touche ENTER


Sujet :

Struts 1 Java

  1. #1
    Invité
    Invité(e)
    Par défaut [LookupDispatchAction] Problème avec soumission par touche ENTER
    Bonjour,

    J'utilise des actions STRUTS héritant de LookupDispatchAction.

    Cela fonctionne bien, sauf dans un cas précis: si, sous Internet Explorer 6 (je ne sais pas pour les autres versions), je valide mon formulaire avec la touche ENTER.

    Internet Explorer ne me renvoie pas la valeur du bouton cliqué (alors que Firefox me renvoie le premier).

    Du coup, le contrôleur STRUTS me jette car je n'ai pas de paramètre pour mon action. Ca se passe avant l'exécution de mon action, donc je suis bloqué.

    Il doit bien y avoir une solution...


    Je précise que je suis en Struts 1.1 et que je ne peux pas upgrader (contrainte client).


    Merci de votre aide.
    Dernière modification par Invité ; 05/12/2006 à 18h39.

  2. #2
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Normalement, la LookupDispatchAction permet d'exécuter des actions différentes en fonction du bouton submit sélectionné.
    Donc, il ne me paraît pas très logique de permettre l'exécution d'une action via la touche ENTER.

    Enfin, si tu as une action que tu souhaites exécuter par défaut, il y a donc peut-être une solution en définissant une méthode unspecified dans la LookupDispatchAction dans laquelle il faut mettre le code de l'action que tu veux exécuter par défaut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public ActionForward unspecified(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Exception
    {
    ...
    }
    Modératrice Java - Struts, Servlets/JSP, ...

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci c_nvy (quel pseudo original) pour ta réponse.

    Après avoir pas mal erré sur les forums, voici quelques explications supplémentaires, ainsi que la solution que j'ai implémenté.

    Tout d'abord, à propos de permettre à l'utilisateur de soumettre son formulaire via la touche entrée lorsque l'on se trouve dans un champ texte, le problème de savoir si c'est logique ou pas ne se pose pas, puisqu'il s'agit du comportement par défaut des formulaires sous IE et firefox (avec comme différence que firefox fait comme si le premier bouton avait été cliqué).

    Le problème est donc de trouver un comportement cohérent lorsque l'utilisateur le fait, et en tout cas éviter le plantage de la page.

    La méthode unspecified est appelée lorsque le paramètre correspondant à l'attribut parameter spécifié dans la section action-mappings/action du config.xml n'est pas trouvée dans la map retournée par la méthode getKeyMethodMap dééfinie dans l'action.

    Dans mon cas, ce paramètre n'est pas passé à l'action. Hors, en Struts 1.1 (corrigé en Struts 1.2), la méthode execute de LookupDispatchAction lance une exception si le paramètre n'est pas passé dans la requête.

    Donc pour ceux comme moi qui ne peuvent pas upgrader et restent en Struts 1.1, la solution est de modifier ce comportement en redéfinissant la méthode execute comme ceci:
    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
    	/**
             * Action par défaut.
             * 
             * @throws Exception
             * @see org.apache.struts.actions.LookupDispatchAction#execute(org.apache.struts.action.ActionMapping,
             *      org.apache.struts.action.ActionForm,
             *      javax.servlet.http.HttpServletRequest,
             *      javax.servlet.http.HttpServletResponse)
             */
    	public ActionForward execute(ActionMapping mapping, ActionForm form,
    			HttpServletRequest request, HttpServletResponse response)
    			throws Exception {
    		if (request.getParameter(mapping.getParameter()) == null) {
    			// aucun paramètre spécifié: on appelle la méthode par défaut
    			return executeDefaut(mapping, form, request, response);
    		} else {
    			// exécution de la méthode associée au paramètre de mapping
    			return super.execute(mapping, form, request, response);
    		}
    	}
    Dans mon cas, j'ai placé ce code dans une classe abstraite AbstractLookupDispatchAction héritant de LookupDispatchAction et contenant également la méthode suivante me permettant d'obliger chaque Action de type lookup a spécifier le comportement par défaut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    /**
             * Méthode par défaut appelée lorsque l'utilisateur à validé son formulaire
             * avec ENTER sous Internet Explorer 6.
             * 
             * @param mapping
             * @param form
             * @param request
             * @param response
             * @return
             */
    	public abstract ActionForward executeDefaut(ActionMapping mapping,
    			ActionForm form, HttpServletRequest request,
    			HttpServletResponse response) throws Exception;
    et dans mon action:
    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
    public class LocalisationRameAction extends AbstractLookupDispatchAction {
    [...]
    /**
             * Méthode permettant de faire le lien entre les boutons submit du
             * formulaire et les fonctions à  appeler sur cette page à  sa soumission.
             * 
             * @see org.apache.struts.actions.LookupDispatchAction#getKeyMethodMap()
             */
    	protected Map getKeyMethodMap() {
    		Map map = new HashMap();
    		map.put("commun.bouton.rechercher", "rechercher");
    		map.put("commun.bouton.visualiserCarto", "visualiserCarto");
    		map.put("commun.bouton.visualiserTableau", "visualiserTableau");
    		return map;
    	}
    	/**
             * Méthode par défaut appelée lorsque l'utilisateur à validé son formulaire
             * avec ENTER sous Internet Explorer 6.
             * 
             * @param mapping
             * @param form
             * @param request
             * @param response
             * @return
             * @throws FwkSystemException 
             */
    	public ActionForward executeDefaut(ActionMapping mapping,
    			ActionForm form, HttpServletRequest request,
    			HttpServletResponse response) throws FwkSystemException{
    		return rechercher(mapping, form, request, response);
    	}
    [...]
    public ActionForward rechercher(ActionMapping mapping, ActionForm form,
    			HttpServletRequest request, HttpServletResponse response) {[...]

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Merci Muscador pour ton explication détaillée, j'ai le même problème, et tes explications vont me permettre de le résoudre !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec soumission de Job
    Par ambre dans le forum PL/SQL
    Réponses: 6
    Dernier message: 18/07/2008, 12h52
  2. Problème avec soumission par touche ENTER struts
    Par sandrine49 dans le forum Struts 1
    Réponses: 4
    Dernier message: 07/04/2008, 17h57
  3. problème avec la commande touch
    Par cmoibal dans le forum Linux
    Réponses: 2
    Dernier message: 03/02/2008, 21h12
  4. Réponses: 1
    Dernier message: 16/01/2007, 22h25
  5. Problème avec vector par référence
    Par vdumont dans le forum SL & STL
    Réponses: 11
    Dernier message: 09/05/2006, 08h25

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