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 2 Java Discussion :

action sans rafraichissement de la vue


Sujet :

Struts 2 Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 18
    Points : 6
    Points
    6
    Par défaut action sans rafraichissement de la vue
    Bonjour, je débute en struts 2 et j'essaye d'utiliser celui ci avec un framework ajax, j'ai dans un menu accordéon un formulaire pour paramétrer des données l'action appelée pour ce formulaire permet de sauvegarder les nouveaux paramètres sélectionnés. Je ne veux en aucun cas avoir une nouvelle vue ou un rafraîchissement de la vue...Comment puis je faire pour que l'action ne fasse que sauvegarder et qu'il n'y ai pas une jsp en résultat? (je ne sais pas si c'est clair ce que je dis...)

  2. #2
    Membre confirmé Avatar de ruscov
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2007
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 347
    Points : 500
    Points
    500
    Par défaut
    Tu n'as qu'à juste rien mettre dans ton result de ton action dans le struts.xml ou ne pas traiter ta réponse ajax.
    Mes logiciels n’ont jamais de bug. Ils développent juste certaines fonctions aléatoires.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    comment ça ne rien mettre dans mon result? faire <result></result> ? dans ce cas là ça me renvoi une page blanche après apel de l'action monaction.action. Comment je dois faire pour ne pas traiter la réponse ajax? (désolé y connais pas grand chose)

  4. #4
    Membre confirmé Avatar de ruscov
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2007
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 347
    Points : 500
    Points
    500
    Par défaut
    Si il te renvoie une page blanche c'est que tu n'as pas fait appel à ton framework ajax. Je ne sais pas t'aider dans l'utilisation de ton framework ajax.
    Mes logiciels n’ont jamais de bug. Ils développent juste certaines fonctions aléatoires.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 19
    Points : 30
    Points
    30
    Par défaut
    Bonjour,

    Ruscov a raison : tout est dans sa réponse.

    Petit exemple :
    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
     
    public class NoResultAction extends ActionSupport {
     
      private String rawData;
     
      @Override
      public String execute() throws Exception {
        System.out.println("Received data :" + rawData);
        return null;
      }
     
      public String getRawData() {
        return rawData;
      }
     
      public void setRawData(String rawData) {
        this.rawData = rawData;
      }
     
    }
    Puis dans "struts.xml" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <action name="noResult" class="com.stac.struts2.action.NoResultAction"/>
    Un petit script en JS (common_ajax.js). Tu remarqueras que la fonction que l'on assigne à "onreadystatechange" ne gère pas la réponse et ne fait rien:
    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
    function ajaxFunction() {
    	var xmlHttp;
    	try {
    		// Firefox, Opera 8.0+, Safari
    		xmlHttp = new XMLHttpRequest();
    	} catch (e) {
    		// Internet Explorer
    		try {
    			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    		} catch (e) {
    			try {
    				xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    			} catch (e) {
    				alert("Your browser does not support AJAX!");
    				return false;
    			}
    		}
    	}
    	xmlHttp.onreadystatechange = function() {
    		if (xmlHttp.readyState == 4) {
    			//ne fait rien
    		}
    	}
    	xmlHttp.open("GET", "/TestStruts2/noResult.action?rawData=Stac", true);
    	xmlHttp.send(null);
    }
    Puis le HTML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <script src="/TestStruts2/js/common_ajax.js" type="text/javascript"></script>
    <title>Test Ajax</title>
    </head>
    <body>
    <form name="myForm">
    Name: <input type="text" name="username" onkeyup="ajaxFunction();"/>
    </form>
    </body>
    </html>
    Quand tu entres un caractère dans le formulaire, une requête est envoyée au serveur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    11:50:19,591 INFO  [XmlConfigurationProvider] Parsing configuration file [struts-plugin.xml]
    11:50:19,607 INFO  [XmlConfigurationProvider] Parsing configuration file [struts.xml]
    11:50:19,638 INFO  [BeanSelectionProvider] Loading global messages from messages
    11:50:33,138 INFO  [STDOUT] Received data :Stac
    Voilà, j'espère que cela peut t'aider.

    Stac

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Merci pour la réponse. Sachant que j'effectue l'action lors d'un click sur mon bouton submit, comment je fais pour envoyer toutes les données de mon formulaire? je dois appeler l'action (dans ajaxFunction()) en passant tous les champs en parametres???

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 111
    Points : 128
    Points
    128
    Par défaut
    Slt,

    Une solution serait d'appeler la même page Jsp avec ton action.
    Comme ça tu pourras récupérer les données soumis dans ton action et réafficher ta jsp.
    Sinon pourquoi tu veux absolument passer par une fonction ajax?
    Peux-tu nous faire voir ton code aussi, ça faciliterai les choses.

    ++

    --

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    je ne veux pas forcément appeler une fonction ajax je voudrais juste que mon action n'effectue aucune changement sur ma vue (je ne fais qu'un enregistrement des paramètres dans la bd).

    Voici mon 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
     
    <s:form id="form" name="form" action="param" target="cible" cssClass="form">	
     
        	<h2 id="paramTitle">Niveaux</h2>	
        	    <div id="input">
    		<input dojoType="dijit.form.NumberSpinner"
    			    value="<s:property value="parametrageActuel.niveau"/>"
    			    style="width: 30%;"
    			    class="medium"
    			    constraints="{max:10,min:1,places:0}"
    			    name="parametrageActuel.niveau"
    			    id="niveau" onChange="Change">	   	
    		</div>
        	<h2 id="paramTitle">Relations</h2>
    		<s:checkbox label="Génériques" name="parametrageActuel.generiques"></s:checkbox>	
     
            	<s:checkbox label="Spécifiques" name="parametrageActuel.specifiques"/>
     
            	<s:checkbox label="Associées" name="parametrageActuel.associes" />
     
            	<s:checkbox label="Employé pour" name="parametrageActuel.exclus"/>
     
    		<input type="hidden" id="inputG" name="parametrageActuel.couleurLGen"/>
     
    		<s:submit value="Enregistrer" id="boutonSubmit" cssClass="soriaBouton" targets="div1" href="%{url}" onclick="Form();"/>			
     
    <s:div id="cible" name="cible"></s:div>
    </s:form>
    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
    35
    36
    37
     
    public class ParametrageAvAction extends ActionSupport {
       private String user="toto";
       protected ParametrageDao paramDao=new ParametrageHibernateDao();
       private Parametrage parametrageActuel;
     
     
     
    	public void setUser(String user) {
    		this.user = user;
    	}
     
     
     
    	public void setParametrageActuel(Parametrage parametrageActuel) {
    		this.parametrageActuel = parametrageActuel;
    	}
     
     
    	    public String execute() throws Exception {
     
     
    	        return "success";
    	    }
     
     
     
    	    public void save() throws Exception {
     
     
    	    	parametrageActuel.setUtilisateur(user);	    	
    	        if (getParametrageActuel() != null) {
    	            paramDao.update(getParametrageActuel());
     
    	        }
     
    	    }
    j'aimerais que l'appel à cette action n'effectue aucun changement sur la page affichée (pas d'appel de la même page ou d'une autre).

    Je sais pas si c'est clair ce que je dis...

    Merci d'avance.

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 111
    Points : 128
    Points
    128
    Par défaut
    Slt,

    J'ai bien compris ton problème.
    Cependant, je ne sais pas si c'est possible.
    Ceci dit tu peux toujours faire appel à la mm Jsp, cette méthode est très utilisée et ça change rien au niveau de ton code. il y aura juste à rajouter un nouveau <result ..> dans ton fichier struts.xml.

    ++

    --

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Le problème c'est que je ne peux pas faire ça justement car j'ai une interface en ajax et je ne veux pas recharger la page en entier sinon jvais perdre les informations qui était encours dans les autres onglets de l'appli...et ça serait bien trop lourd de tout recharger...n'y a t'il pas de solution? une action génére obligatoirement une nouvelle vue?

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    quelqu'un aurait de la documentation qui pourrait m'aider?

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Bonjour, j'aimerais savoir à quoi sert exactement le executeResult de <s:action j'ai vu que s'il était à false le execute de l'action n'est pas executé mais est ce que les autres méthodes de l'action vont être appelées? est ce qu'une jsp est généré quand même?

  13. #13
    Candidat au Club
    Inscrit en
    Août 2012
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Août 2012
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    même problème que le tiens mon grand , ta trouvé des resultats ?

Discussions similaires

  1. Réponses: 8
    Dernier message: 09/06/2006, 16h01
  2. [Plug-in]"Link with editor" view action dans une de mes vues...
    Par tophebboy dans le forum Eclipse Platform
    Réponses: 5
    Dernier message: 19/05/2006, 14h49
  3. [Struts][debutant]Action sans Form?
    Par sebus dans le forum Struts 1
    Réponses: 6
    Dernier message: 27/04/2006, 16h26
  4. [Struts]Executer une action sans ActionForm associé ?
    Par brousaille dans le forum Struts 1
    Réponses: 7
    Dernier message: 19/09/2005, 17h24
  5. Réponses: 7
    Dernier message: 24/03/2005, 16h55

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