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 :

javascript pour exécuter une action


Sujet :

Struts 1 Java

  1. #1
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 25
    Par défaut javascript pour exécuter une action
    Bonjour

    En fait dans un formulaire j'ai deux bouton: un bouton submit et un notre bouton pour l'affichage d'une arborescence de dossiers.
    Pour le 2ème bouton j'ai écrit un javascriptpour faire l'appel d'une action qui me permet de faire appel à la méthode nécessaire pour faire l'affichage.
    Le code du bouton est le suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <html:form action="import1" name="importForm"  ...
    <tr>
    <td><html:button property="bouton " value="Browse" onclick="javascript:browseAction()"/></td>
    </tr>
    ...
    </html:form>
    Et le javascript correspondant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function browseAction()
    {
     document.import1Form.action="monAction.do";
     document.import1Form.submit();
    }
    l'erreur c'est que lors de l'exécution l'action n'est pas localisée.
    apparemment c'est un problème de chemin.

    En fait est ce que vous pouvez m'expliquer comment je peux faire l'appel de cette action.
    merci

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Par défaut
    Juste, avant tout, utilise STP les balises Code (les # dans la barrre d'outilsd")...pour une question de lisibilité

    En ce qui concerne ton pb, perso j'aurais plus fait un truc du genre :
    dans la jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <html:form action="/action1">
    <tr>
    <td><html:submit>Submit button</html:submit></td>
    </tr>
    ...
    </html:form>
    Dans le 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
    <form-beans>
        <!-- form bean -->
        <form-bean name="importForm" type="form.ImportForm"/>
         </form-beans>
      <global-exceptions>
      </global-exceptions>
      <action-mappings>
        <action path="/action1" name="importForm" type="action.TonAction" validate="true">
          <forward name="success" path="/jsp/jspcorrespondtoaction.jsp"/>
          <forward name="echec" path="/jsp/error.jsp"/>
        </action>
    ....
    Et dans ton 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
    public class TonAction extends Action{
     
    	public ActionForward execute(ActionMapping mapping,
    			ActionForm form,
    			HttpServletRequest request,
    			HttpServletResponse response)
    			throws IOException, ServletException {
    String cible = "success"; // cible par défaut
    if("blabla"=="return page error"){ // test si je sais pas quoi
          cible = "error";
    }
     
    //redirection vers la vue appropriee
    	    return (mapping.findForward(cible));
    }

    Voilà un début de piste....Bon courage

  3. #3
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 25
    Par défaut
    bonjour

    Mais je crois que de cette façon là je ne vais pas fair la différence entre le traitement que chaque bouton doit lancer.
    Car le premier bouton "submit" doit faire un forward vers une autre page jsp alors que le deuxième bouton "button" doit lancer une action qui fait appel à une méthode dans une classe que j'ai déjà crée.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Par défaut
    Je sais que ce n'est pas forcément des plus élégants mais tu as possibilité de faire de la manière suivante :
    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
    <html>
    <head>
    <SCRIPT language="JavaScript">
    function setWhatToDo(t, v) {
     	t.form.elements[0].value=v;
    }
    </SCRIPT>
    </head>
    ...
     
    <html:form action="/action1">
    <tr>
    <td><html:hidden  property="whatToDo"></td>
    <td><html:submit  onclick="setWhatToDo(this,'submitButton1')">Submit button 1</html:submit></td>
    <td><html:submit onclick="setWhatToDo(tgis,'submitButton2')">Submit button 2 </html:submit></td>
    </tr>
    ...
    </html:form>
    Et dans ton form :
    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
    package form;
    public class ImportForm extends ActionForm {
    private String whatToDo;
    ...
    ...
    /*getters & setters*/
    private String getWhatToDo(){
         return whatToDo;
    }
    private void setWhatToDo(String whatToDo){
         this.whatToDo=whatToDo;
    }
    ...
    ...
    }
    Dans l'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
    public class TonAction extends Action{   
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)  throws IOException, ServletException { 
          String cible = "success"; // cible par défaut 
         if(form!=null){ // test si formulaire non null
             ImportForm importForm = (ImportForm )form;
             String whatToDo = importForm.getWhatToDo();
             if(whatToDo .equals("submitButton1")){
                    cible="cibleButton1";
             }
             else{
                   if(whatToDo .equals("submitButton2")){
                          cible="cibleButton2";
                   }
             }
         }  
         //redirection vers la vue appropriee  
         return (mapping.findForward(cible)); }

    et dans le struts-config :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <form-beans>
        <!-- form bean -->
        <form-bean name="importForm" type="form.ImportForm"/>
         </form-beans>
      <global-exceptions>
      </global-exceptions>
      <action-mappings>
        <action path="/action1" name="importForm" type="action.TonAction" validate="true">
          <forward name="cibleButton1" path="/jsp/jspcorrespondsubmitbybutton1.jsp"/>
          <forward name="cibleButton2" path="/jsp/jspcorrespondsubmitbybutton2.jsp"/>
          <forward name="success" path="/jsp/jspcorrespondtoaction.jsp"/>
          <forward name="echec" path="/jsp/error.jsp"/>
        </action>
    ....

    Et le tour est joué

    Bon courage

  5. #5
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 25
    Par défaut
    Bonjour

    en fait j'ai adopté le code que vous m'avez proposé mais il me génère une l'erreur suivante:


    D'après la TLD, le tag html:hidden doit être vide, mais ne l'est pas

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Par défaut
    Ca c'est parce que le tag html:hidden n'est pas fermé, il faut le finir par "/>" au lieu de ">".
    Sinon, pour différencier la source de ton submit (que quel bouton t'as cliqué), le plus simple et élégant que je connaisse en Struts est de passer par le property des boutons submit :

    Dans ta JSP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <html:submit property="button1" value="Submit 1"/>
    <html:submit property="button2" value="Submit 2"/>
    Dans ton action, ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (myForm.getButton1() != null) {
       ... ton code ...
    } else if (myForm.getButton2() != null) {
       ... ton code ...
    }
    En fait, Struts met le value du bouton cliqué dans l'attribut "buttonX", et laisse null aux autres.

    Au passage :
    Citation Envoyé par hoor3in
    un bouton submit et un notre bouton pour l'affichage d'une arborescence de dossiers.
    T'as pas honte ?

  7. #7
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 25
    Par défaut
    mnt je viens de modifier le code comme suit
    et là je n'ai plus l'erreur que j'avais mais le traitement suivant n'est pas exécuté
    car même si je clique sur les deux bouton je n'ai un forward que vers la page jsp par défaut.
    est ce que vous avez une idée

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Par défaut
    oups.....dsl, il est vrai que j'ai ecris le code juste comme ca rapidos....et je n'avais pas testé.....dsl pour la gaffe de mon html:hidden non fermé
    Joli mixouille la bidouille des property des button je connaissais pas, je recaserais ca dans mon code une prochaine fois.....

    Mais j'ai tout de même une remarque :
    Au passage :
    Citation:
    hoor3in a écrit :
    un bouton submit et un notre bouton pour l'affichage d'une arborescence de dossiers.
    T'as pas honte ?
    .... C'est pas gentile de se moquer....une erreur de frappe sans doute

  9. #9
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 25
    Par défaut
    j'ai pas honte de quoi?????
    ????????????????????
    j'aimerais bien que vous précisez ce que vous voulez dire.

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Par défaut
    pourquoi un ?

    Bref en meme temps c'est pareil je suippose...

    Tu es en mode debug? Tu peux regarder à l'entrée dans la fonction public ActionForward execute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class TonAction extends Action{
     
    	 public ActionForward execute(ActionMapping mapping,
    	            ActionForm form,
    	            HttpServletRequest request,
    	            HttpServletResponse response)
    	            throws IOException, ServletException {
    Quelle est la valeur de tous tes champs du form? ton form est pas null tout de même?

  11. #11
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 25
    Par défaut
    en fait c'était une erreur de frappe il ne faut pas se moquer d'ac

  12. #12
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 25
    Par défaut
    le form n'est pas null

  13. #13
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Par défaut
    roh, si on peut plus taquiner

    ceci dit :
    Citation Envoyé par hoor3in
    en fait c'était une erreur de frappe
    non, à moins que tu aies une grave malformation des mains, c'est un magnifique specimen de faute d'orthographe

  14. #14
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Par défaut
    Et j'aimerais bien t'aider, mais on manque un peu de contenu pour ça. Tu peux poster ton code tel qu'il en est ?

  15. #15
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 25
    Par défaut
    d'accord
    voici mon code après tous les changements effectués

    page 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <%@ page language="java"%>
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%> 
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>
     
    <html> 
    	<head>
    		<title>JSP for Import1Form form</title>
    	</head>
    	<body>            
     
    	<html:form action="import1" name="Import1Form" type="com.yourcompany.struts.form.Import1Form" method="post" > 
    	<table>
    		<tr>
    		    <td>
    			<font>Format du fichier source:</font>
    		    </td>
     
    			<td><html:select name="Import1Form" property="liste" >
    			        <html:option value=" "  />
    				<html:option value="Texte"  />
    				<html:option value="Excel"  />
    				<html:option value="XML"  /></html:select></td></tr>
    		<tr>
    		<td>
    			<font >Fichier de données source:</font>
     
    		</td>
    		     <td>
    		     <html:text property="fichier" /></td>
     
    		 </tr>
    		 <tr>
                     <td><html:submit property="button1" value="browse"/><td/>
                     <td><html:submit property="button2" value="valider"/><td/>
                    </tr>
     
           </table>
     
    	</html:form></body>
    </html>
    le formulaire:
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    public class Import1Form extends ActionForm {
     
     
    	/** liste property */
    	private String liste;
    	private String fichier;
    	private String button1;
    	private String button2;
     
    	/*getters & setters*/
     
            public String getButton1() {
    		return button1;
    	}
     
     
    	public String getButton2() {
    		return button2;
    	}
    	public void setButton1(String button1) {
    		this.button1 = button1;
    	}
     
     
     
    	public void setButton2(String button2) {
    		this.button2 = button2;
    	}
            public String getFichier() {
    		return fichier;
    	}
     
     
     
    	public void setFichier(String fichier) {
    		this.fichier = fichier;
    	}
     
    	public String getListe() {
    		return this.liste;
    	}
     
    	public void setListe(String liste) {
    		this.liste = liste;
    	}
     
     
    	/*
    	 * Generated Methods
    	 */
     
     
     
     
    	/** 
             * Method validate
             * @param mapping
             * @param request
             * @return ActionErrors
             */
    	public ActionErrors validate(ActionMapping mapping,
    			HttpServletRequest request) {
    		// TODO Auto-generated method stub
    		return null;
    	}
     
    	/** 
             * Method reset
             * @param mapping
             * @param request
             */
    	public void reset(ActionMapping mapping, HttpServletRequest request) {
    		// TODO Auto-generated method stub
    	}
     
    }
    l'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
     
    public ActionForward execute(ActionMapping mapping, ActionForm form,
    			HttpServletRequest request, HttpServletResponse response) 
    	{
    		// TODO Auto-generated method stub
    		 String cible = "importTexte "; // cible par défaut 
    	     if(form!=null){ 
    	         Import1Form importForm = (Import1Form )form;
    	          if (importForm.getButton1() != null) {
    	        	 cible="import2";
    	         }
    	    else if (importForm.getButton2() != null) {
    	             cible="importTexte";
    	               }
    	         }
    	     return (mapping.findForward(cible)); 
    	     }
    struts-config:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <action path="/import1" type="com.yourcompany.struts.action.Import1Action">
      <forward name="importTexte" path="/vues/importTexte.jsp" redirect="true" /> 
      <forward name="import2" path="/vues/import2.jsp" redirect="true" /> 
      </action>

  16. #16
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Par défaut
    Tu as oublié de préciser le form de ton action (du coup, ton objet form était null) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <action path="/import1" type="com.yourcompany.struts.action.Import1Action" name="import1Form">
    avec import1Form configuré dans tes form-beans.

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Par défaut
    Je te l'ai marqué plus haut le struts-config!!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <form-beans>
        <!-- form bean -->
        <form-bean name="importForm" type="form.ImportForm"/>
         </form-beans>
      <global-exceptions>
      </global-exceptions>
      <action-mappings>
        <action path="/action1" name="importForm" type="action.TonAction" validate="true">
          <forward name="cibleButton1" path="/jsp/jspcorrespondsubmitbybutton1.jsp"/>
          <forward name="cibleButton2" path="/jsp/jspcorrespondsubmitbybutton2.jsp"/>
          <forward name="success" path="/jsp/jspcorrespondtoaction.jsp"/>
          <forward name="echec" path="/jsp/error.jsp"/>
        </action>
    ....

  18. #18
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 25
    Par défaut
    bonjour

    Mais bien sûr que j'ai précisé le form de l'action. Mais l'autre fois j'ai seulement écrit une partie du code de struts-config.
    Bon voici le code


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <form-beans >
         <form-bean name="import1Form" type="com.yourcompany.struts.form.Import1Form" />     
      </form-beans>

  19. #19
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Par défaut
    Comment peux tu affirmer que l'action n'est pas exécutée? Tu t'es mis en mode debug pour voir qu'il retre pas dans l'intruction du "if"?

    Parce que si ton form est pas null maiss qu'il rentre pas dans le if.....ya un petit souci là je vois pas trop comment c'est possible

    Tu développe avec Eclipse?

  20. #20
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 25
    Par défaut
    Mais quand je clique sur chaque boutton c'est seulement la page jsp par défaut qui est affiché donc le traitement du if n'est pas exécuté.
    pour l'outil, je travaille avec myeclipse.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Equivalent jquery pour exécuter l'action d'une form
    Par Daimonji dans le forum jQuery
    Réponses: 5
    Dernier message: 03/02/2012, 15h49
  2. Lien pour exécuter une action
    Par MRextra dans le forum Struts 2
    Réponses: 2
    Dernier message: 14/12/2011, 10h46
  3. Réponses: 1
    Dernier message: 04/06/2008, 20h13
  4. Réponses: 8
    Dernier message: 29/03/2007, 14h48
  5. Réponses: 4
    Dernier message: 27/04/2004, 14h45

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