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

Servlets/JSP Java Discussion :

[struts]plusieurs actions sur 1 JSP sans DispatchAction


Sujet :

Servlets/JSP Java

  1. #1
    Membre régulier
    Homme Profil pro
    responsable technique
    Inscrit en
    Novembre 2002
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : responsable technique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 100
    Points : 89
    Points
    89
    Par défaut [struts]plusieurs actions sur 1 JSP sans DispatchAction
    Bonjour
    Dans mon application, j'ai des JSP sur lesquelles plusieurs boutons sont disponibles. Par exemple, j'ai une JSP avec les boutons "Enregistrer", "Envoyer" et "Supprimer". Le problème est que le bouton "Enregistrer" doit appeler l'Action EnregistrerAction, le bouton "Envoyer" doit appeler l'Action EnvoyerAction, etc... En gros, il doit y avoir une action pour chaque bouton, car les traitements sont complètement différents. L'ennui est que je ne peux pas utiliser le DispacthAction car tous les traitements des boutons d'une JSP seraient dans la même Action et dans mon cas chaque bouton doit appeler sa propre action (je sais c'est chiant mais c'est pas moi qui décide, c'est pour notamment que chaque développeur bosse sur sa propre action et pas plusieurs sur un même action...)
    J'ai bien essayé de changer dynamiquement l'attribut action de mon formulaire comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <script language="JavaScript">
    function changeToSaveAction(){
       document.docForm.action = "/enregistrerAction";
       document.docForm.submit();
    }
    </script>
    ... ... ...
    <A href="#" onClick="javascript:changeToSaveAction()">
    <img src="enregistrer.gif"></a>
    et dans mon struts-config, j'ai bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <action path="/enregistrerAction"
    type="com.myPackage.actions.EnregistrerAction"
    name="docForm"
    scope="request" />
    Mais ça ne marche pas

    Qq'un aurait-il une idée. Merci pour votre aide.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 103
    Points : 92
    Points
    92
    Par défaut
    A quel moment cela ne fonctionne pas ?
    Lors du chargement de votre form ou lors du clic sur l'image ?

    Comment cela ne marche pas ?
    Message d'erreur ou submit systématique du form de l'action de départ.

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 27
    Points : 22
    Points
    22
    Par défaut
    Ce que je trouve bizarre, c'est qu'il n'y a pas d'extension a ton action :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.docForm.action = "/enregistrerAction";
    Moi, j'aurais plus vu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.docForm.action = "/enregistrerAction.do";
    Tu mets ".do", ou ".ce que tu veux" suivant le config de ton fichier web.xml

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 103
    Points : 92
    Points
    92
    Par défaut
    Non Sherkan,
    Pour un formulaire, tu mets simplement le path :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <html:form action="monAction">
    ...
    </html:form>
    Par contre, pour y accéder, il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.monActionForm.action = ...
    Mets tu bien le "bon" nom de formulaire pour y accéder dans ta méthode Javascript.

  5. #5
    Membre régulier
    Homme Profil pro
    responsable technique
    Inscrit en
    Novembre 2002
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : responsable technique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 100
    Points : 89
    Points
    89
    Par défaut
    Que je mette un ".do" ou pas je pense que ça ne changera rien, en fait l'Action n'est pas du tout appelée.
    j'ai modifié le script comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <script language="JavaScript"> 
    function changeToSaveAction(){ 
       alert("XXX");
       document.docForm.action = "/enregistrerAction"; 
       alert("XXX");
       document.docForm.submit(); 
    } 
    </script>
    le premier alert s'affiche mais pas le second ! pourtant la syntaxe est bonne. Si je mets en commentaire la ligne document.docForm.action = "...", alors tout se passe bien, les 2 alerts s'affichent et c'est l'action de départ du formulaire qui appelée comme il faut.
    Qu'est ce qui peu bien clocher ???

  6. #6
    Membre régulier
    Homme Profil pro
    responsable technique
    Inscrit en
    Novembre 2002
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : responsable technique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 100
    Points : 89
    Points
    89
    Par défaut
    Que je mette un ".do" ou pas je pense que ça ne changera rien, en fait l'Action n'est pas du tout appelée.
    j'ai modifié le script comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <script language="JavaScript"> 
    function changeToSaveAction(){ 
       alert("XXX");
       document.docForm.action = "/enregistrerAction"; 
       alert("XXX");
       document.docForm.submit(); 
    } 
    </script>
    le premier alert s'affiche mais pas le second ! pourtant la syntaxe est bonne. Si je mets en commentaire la ligne document.docForm.action = "...", alors tout se passe bien, les 2 alerts s'affichent et c'est l'action de départ du formulaire qui appelée comme il faut.
    Qu'est ce qui peu bien clocher ???

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 103
    Points : 92
    Points
    92
    Par défaut
    Comment définis tu ton html:form ?

  8. #8
    Membre à l'essai
    Inscrit en
    Août 2004
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 27
    Points : 22
    Points
    22
    Par défaut
    Oui, l'erreur doit se trouver au niveau du formulaire, car si ca, ca ne passe pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.docForm.action = "/enregistrerAction";
    Ca veut dire que le formulaire ne doit pas s'appeler "docForm" ...

    Mais sinon, pour appeler tes actions, tu n'utilises pas d'extension (moi j'utilise l'extension .do ...) ???

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 103
    Points : 92
    Points
    92
    Par défaut
    On met le .do quand on fait un lien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="monAction.do">mon lien</a>
    mais pas dans le action d'un form

  10. #10
    Membre régulier
    Homme Profil pro
    responsable technique
    Inscrit en
    Novembre 2002
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : responsable technique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 100
    Points : 89
    Points
    89
    Par défaut
    si, le nom du formulaire est correct
    sinon pourquoi cette ligne marcherait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    document.docForm.submit();
    et pas celle-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    document.docForm.action = "/enregistrerAction";
    ????????

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 103
    Points : 92
    Points
    92
    Par défaut
    Il me semble que si ton second alert ne s'était pas affiché, c'est parce qu'une erreur Javascript s'est déclenchée.
    Maintenant, si tu ne veux pas nous dire comment tu déclares ton html:form alors bon courage pour la suite.

    Stéphanie

  12. #12
    Membre éprouvé
    Avatar de yolepro
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 918
    Points : 1 144
    Points
    1 144
    Par défaut
    Moi j'aurais fait une truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function submit(){
      var form = document.docForm;
      form.action = 'enregistrerAction.do';
      form.submit();
    }

  13. #13
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Pour être sur de bien récuperer ton formulaire (tu as peut-être plusieurs formulaire ayant le même nom....), affecte un styleId à celui qui t'interesse, puis tu pourras le récuperer en faisant un:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    document.getElementById('...')
    Ensuite, quand tu changes l'attribut action de ton formulaire, il faut bien entendu lui mettre une URL valide, c'est à dire une terminant par un .do

    Maintenant, sur le fond, ce que tu essayes de faire est assez hérétique, et ca ne m'etonnes pas que ca ne marche pas. En effet, en struts, lors de la création de ton formulaire, Struts prépare l'ActionForm correspondant. En changeant l'action, tu changes le formulaire, ce qui doit être très perturbant pour toi.

    Donc clairement, la seule solution c'est le DispatchAction (voire LookupDispatchAction si tu internationalises). Et pour tes problèmes de management rien ne t'empeche de faire une 'redirection' dans ton Action:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public ActionForward supprimer(ActionMapping mapping,
    					 ActionForm form,
    					 HttpServletRequest request,
    					 HttpServletResponse response) {
    	return myClasse1.supprimer(mapping,form,request,response);
    	}
    Rien ne t'empeche donc de créer chacune de tes Actions dans des classes séparées tout en utilisant un DispatchAction.

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 54
    Points : 58
    Points
    58
    Par défaut
    Il me semble que le ".do" est quand meme nécessaire si on regarde le html généré d'un page... il est bien présent :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <form name="SwelAdressesForm" method="post" action="/Adresses.do;jsessionid=5C73D3F801D3DAAFC773DD211799DAE5">

  15. #15
    Membre régulier
    Homme Profil pro
    responsable technique
    Inscrit en
    Novembre 2002
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : responsable technique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 100
    Points : 89
    Points
    89
    Par défaut
    Merci DenisC, je n'avais pas pensé à ça mais je pense que c'est comme cela que je vais faire, je vais créer une classe Action associée à chaque bouton et c'est mon dispatch Action qui appellera la bonne 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
     
    public class EditionAction extends DispatchAction {
       public ActionForward enregistrer(
          ActionMapping mapping, 
          ActionForm form, 
          HttpServletRequest request, 
          HttpServletResponse response) { 
          return EnregistrerAction.execute(mapping,form,request,response); 
       }
       public ActionForward envoyer(
          ActionMapping mapping, 
          ActionForm form, 
          HttpServletRequest request, 
          HttpServletResponse response) { 
          return EnvoyerAction.execute(mapping,form,request,response); 
       }
       ... ... ...
    }

  16. #16
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Tout a fait, ca me parait être le plus correct

    PS: n'oublies pas le Tag [Résolu] 8)

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

Discussions similaires

  1. Struts 1 : action sur un bouton dans ma JSP
    Par Invité dans le forum Struts 1
    Réponses: 1
    Dernier message: 12/09/2014, 19h55
  2. [Spring MVC] Plusieurs actions sur le même formulaire
    Par aloha dans le forum Spring Web
    Réponses: 3
    Dernier message: 26/08/2006, 15h22
  3. [STRUTS] plusieurs clic sur un bouton
    Par jehlg dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 27/03/2006, 15h02
  4. [STRUTS] Plusieurs actions dans une meme page
    Par DarkWark dans le forum Struts 1
    Réponses: 22
    Dernier message: 10/01/2006, 16h18
  5. Réponses: 4
    Dernier message: 11/09/2004, 16h38

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