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 :

plusieurs Form et plusieurs DispatchAction dans une même page


Sujet :

Struts 1 Java

  1. #1
    Membre habitué Avatar de phoebe
    Inscrit en
    Août 2003
    Messages
    289
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 289
    Points : 143
    Points
    143
    Par défaut [Tiles] plusieurs Form et plusieurs DispatchAction dans une même page
    Bon je présente rapidement mon soucis :

    J'utilise Tiles pour la disposition de mes écran. J'ai une petite zone à gauche de l'écran contenant l'action A et la zone principale qui contient l'Action B
    l'Action A est liée à mon Form A.
    l'Action B est liée à mon Form B.

    Form A et Form B héritent d'un même parent ayant un attribut "dispatch" (c'est l'attribut destiné à contenir le nom de la méthode à appeler)

    le problème c'est que quand je clique sur le bouton "supprimer" dans mon Form B, j'aimerais appeler la méthode "supprimer()" de mon Action B, ce que struts fait très bien mais il ne fait pas que ça malheureusement, il appelle aussi la méthode "supprimer()" de mon Action A, et cette méthode n'existe pas......... d'où mon problème

    En cliquant sur le bouton "supprimer" la valeur de dispatch de mon Form B est donc renseignée à "supprimer", normal, mais apparement le dispatch de mon Form A l'est aussi, et là c'est moins normal...

    quelqu'un a une idée ?

  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
    Ce comportement me semble logique vu que tu as donné le même nom de paramètre, soit dispatch, aux deux Actions.

    Fais un test en donnant un autre nom à ton paramètre pour la deuxième Action.
    Modératrice Java - Struts, Servlets/JSP, ...

  3. #3
    Membre habitué Avatar de phoebe
    Inscrit en
    Août 2003
    Messages
    289
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 289
    Points : 143
    Points
    143
    Par défaut
    C'est le même nom de paramètre oui, mais pas du même Form...

    j'ai essayé de changer le nom du paramètre de mon Action A et du coup ça marche pour l'action "supprimer" mais ça ne marche toujours pas dans certains autres cas, comme "trier" par exemple, et je dois dire que là c'est encore pire, car des fois ça marche et des fois ça marche pas...

  4. #4
    Membre expérimenté Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Points : 1 639
    Points
    1 639
    Par défaut
    Tu peux faire voir ton code(en particulier pour les methodes ou ca ne fonctionne pas).

  5. #5
    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
    Le paramètre est lié à l'Action.
    La DispathAction fait un request.getParameter("nomDuParametre") pour récupérer sa valeur, valeur qui correspond au nom de la méthode de l'Action à exécuter.
    C'est pour cela que je trouve normal que les méthodes supprimer() des deux Actions soit appelées si tu donnes le même nom à ce paramètre.

    Par contre, pour l'autre problème, il faudrait effectivement voir ton code.
    Modératrice Java - Struts, Servlets/JSP, ...

  6. #6
    Membre habitué Avatar de phoebe
    Inscrit en
    Août 2003
    Messages
    289
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 289
    Points : 143
    Points
    143
    Par défaut
    ça venait de mon code javascript, mais ça m'embête de devoir mettre un nom de paramètre différent...

    enfin si on a pas le choix...


    merci à vous.

  7. #7
    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
    Effectivement, tu n'as pas le choix.

    J'espère que tu as compris pourquoi.
    Modératrice Java - Struts, Servlets/JSP, ...

  8. #8
    Membre habitué Avatar de phoebe
    Inscrit en
    Août 2003
    Messages
    289
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 289
    Points : 143
    Points
    143
    Par défaut
    J'ai compris pourquoi... c'est parce que Struts n'est pas au point à ce niveau, il ne devrait pas stocker le nom de la méthode dans l'attribut "dispatch" mais plutôt dans un attribut qui concatènerait le nom du Form et "dispatch"

    Je pense que ça serait possible en redéfinissant le RequestProcessor mais bon comme je sais pas trop où je vais et que ça risque d'être assez lourd, je vais me contenter du struts de base.

  9. #9
    Membre habitué Avatar de phoebe
    Inscrit en
    Août 2003
    Messages
    289
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 289
    Points : 143
    Points
    143
    Par défaut
    Je rouvre ce sujet car finalement j'ai toujours un petit soucis.
    Voilà j'ai donc mon Action A qui est en fait un petit outil de recherche dans un coin de ma page puis mon Action B qui est la fonctionnalité principale de la page. Le problème c'est que si je lance la recherche (A) alors les résultats s'affichent bien (toujours dans mon Form A, donc sans toucher à mon Form B) mais le pb c'est que je n'ai plus que mon Form A à l'écran.

    je rappelle que j'utilise Tiles, je pense que ça vient de là mais je ne vois pas comment faire...

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Points : 431
    Points
    431
    Par défaut
    Comment ca ? Tu veux dire que tous tes forms sont vides (donc erreurs et/ou zones vides), ou que seul ton tile A s'affiche (seule ta JSP A est exécutée) ?

    Si tu as un problème de form vide, mettre tes forms en session pourrait peut-être résoudre ton problème, avec les précautions d'usage quand on utilise un contexte session.

    Sinon, pour qu'on comprenne mieux, tu devrais poster le code de ta JSP (surtout ton tag <html:form>), de ton struts-config.xml, et de ton action A.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Points : 431
    Points
    431
    Par défaut
    Citation Envoyé par c_nvy
    Effectivement, tu n'as pas le choix.

    J'espère que tu as compris pourquoi.
    Si, il a le choix : ne pas utiliser les DispatchAction, qui ne présentent aucun intérêt, et ont bien plus tendance à créer des bugs qu'à résoudre des problématiques.

  12. #12
    Membre habitué Avatar de phoebe
    Inscrit en
    Août 2003
    Messages
    289
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 289
    Points : 143
    Points
    143
    Par défaut
    OK, voici un extrait de mes fichiers de configuration struts :

    tiles-defs.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <definition name="simpleLayout" template="/WEB-INF/layout/simpleLayout.jsp">
        <put name="header" value="/WEB-INF/tiles/header.jsp"/>
        <put name="gauche" value="/WEB-INF/tiles/gauche.jsp"/>
        <put name="centre" value=""/>
        <put name="footer" value="/WEB-INF/tiles/footer.jsp"/>
    </definition>
     
    <definition name="/page_A" template="/WEB-INF/tiles/body/actionA.jsp">
    </definition>
     
    <definition name="/page_B" extends="simpleLayout">
        <put name="centre" value="/WEB-INF/tiles/body/actionB.jsp"/>
    </definition>
    simpleLayout.jsp
    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
     
    <table>
      <tr>
        <td colspan="2">
          <tiles:insert attribute="header"/>
        </td>
      </tr>
      <tr>
        <td>
          <tiles:insert attribute="gauche"/>
        </td>
        <td>
          <tiles:insert attribute="centre"/>
        </td>
      </tr>
      <tr>
        <td colspan="2">
          <tiles:insert attribute="footer"/>
        </td>
      </tr>
    </table>
    gauche.jsp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <jsp:include page="/menu.do" flush="true"></jsp:include>
    <br />
    <jsp:include page="/actionA.do" flush="true"></jsp:include>
    struts-config.xml
    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
     
    <action path="/actionA" name="formA" 
            scope="request" parameter="dispatch_A"
            type="fr.monAppli.ActionA"
            input="/page_A" validate="true">
      <forward name="init" path="/page_A" />
    </action>
     
    <action path="/actionB" name="formB" 
            scope="request" parameter="dispatch_B"
            type="fr.monAppli.ActionB"
            input="/page_B" validate="true">
      <forward name="init" path="/page_B" />
      <forward name="calcul" path="/page_calcul" />
    </action>
    S'il vous en faut plus, je peux encore en rajouter...

Discussions similaires

  1. Réponses: 0
    Dernier message: 01/07/2008, 16h16
  2. [XHTML] comment déclarer plusieurs doctypes dans une même page
    Par elsapascal dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 21/06/2008, 11h20
  3. Réponses: 7
    Dernier message: 13/10/2006, 00h45
  4. Plusieurs style de liens dans une même page
    Par keishah dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 23/08/2006, 14h22

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