Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/02/2011, 10h54   #1
Nouveau Membre du Club
 
Inscription : octobre 2008
Messages : 68
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 68
Points : 26
Points : 26
Par défaut [DWR] Fonction callback et variable globale

Bonjour à tous,

Je développe actuellement une application en JSPs/Servlets et utilise DWR pour une certain nombre de contrôles.

Je souhaite récupérer la valeur de retour d'une fonction DWR et l'affecter à une variable globale JS mais j'ai irrémédiablement undefined quand je fais appel à celle-ci...

Je déclare une variable globale suivi du code de ma fonction callback :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        ...
        var test;
 
        function dwrCheckUsername() {        
            var username=document.getElementById("empUserName").value;
 
	    Dwr.checkUsername(username, function(data) { // ici ma fonction DWR qui fonctionne à merveille
	        dwr.util.setValue("empUserName", data);
	        if (username!=data) {
	            test="Login déjà pris";
	        }
                else {
	            test="Login valide";
	        }	  	  
	    }); 
        }
        ...
La portion de code de ma JSP où j'appele la fonction dwrCheckUsername() :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
        ...
        <script type='text/javascript'>
        var test;
 
        function dwrCheckUsername() {        
            var username=document.getElementById("empUserName").value;
 
	    Dwr.checkUsername(username, function(data) {
	        dwr.util.setValue("empUserName", data);
	        if (username!=data) {
	            test="Login déjà pris";
	        }
	        else {
		    test="Login valide";
	        }	  	  
             });
        } 
 
        function checkForm() { // fonction appelée sur le onsubmit
             dwrCheckUsername();
             alert("Test : " + test); // undefined
        }
        </script>
        ...
Là où le bas blesse ce que ma variable test n'est donc jamais valorisée...

Je voudrais bien comprendre...
A&N_L est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 11h12   #2
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 572
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 572
Points : 4 073
Points : 4 073
Que fait ta fonction Dwr.checkUsername ?
__________________

...pour les linguistes et les curieux >>> générateur de phrases aléatoires

__________________
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 12h05   #3
Nouveau Membre du Club
 
Inscription : octobre 2008
Messages : 68
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 68
Points : 26
Points : 26
Salut Romain,

Ma fonction Dwr.checkUsername prend en paramètre une string (une saisie provenant d'un input type="text") et vérifie en base si cette string (il s'agit d'un login pour le coup) est présente... ou pas...

La dite fonction :
Code :
1
2
3
4
public String checkUsername(String username) {
    String checkLogin = FormMgmt.checkLogin(username);
    return checkLogin;
}
La fonction FormMgmt.checkLogin(username) :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public static String checkLogin(String username) {
    List<String> lUsername=getListUsernane ();
    username=existUsernameOrEmail(username, lUsername, 1);
    return username;          
}
 
public static String existUsernameOrEmail(String usernameOrEmail, List<String> lString, int cpt) {   
    if(lString.contains(usernameOrEmail)) {
        if (usernameOrEmail.contains("@")) {
    	    return "Email existant... veuillez en changer.";
    	}
 
    	usernameOrEmail+=cpt;
        usernameOrEmail=existUsernameOrEmail(usernameOrEmail, lString, cpt++);
	return usernameOrEmail;
    }
    else {
        return usernameOrEmail;
    }    	
}
Le résultat attendu de la fonction Dwr.checkUsername est le bon.

Je veux donc capter le retour de cette fonction (une string) pour l'affecter à une variable globale JS.
A&N_L est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 12h21   #4
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 802
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 802
Points : 35 807
Points : 35 807
Code :
1
2
3
4
function checkForm() { // fonction appelée sur le onsubmit
    dwrCheckUsername();
    alert("Test : " + test); // undefined
}
Un grand classique

Manifestement, tu lances un appel AJAX pour vérifier la validité de ton username sur le serveur.
Donc la valeur de test ne sera modifiée qu'une fois la réponse reçue, ce qui n'est certainement pas le cas au moment de l'alert !
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 12h39   #5
Nouveau Membre du Club
 
Inscription : octobre 2008
Messages : 68
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 68
Points : 26
Points : 26
Effectivement Bovino, je dirai même mieux LE grand classique !

J'ai quand même fait pas mal de recherches avant de poster.

Je suis tombé sur le principe des fonctions callback.

Pour moi (mais du coup je me fourvoie très certainement), la fonction dwrCheckUsername (dans laquelle se trouve Dwr.checkUsername) est une fonction callback que j'appele plus tard dans mon code (dans checkForm) et qui, selon la compréhension que j'en ai, devrait me valoriser ma variable test.

J'ai bien compris que le retour de ma fonction Java est renvoyé bien plus tard dans mon code JS alors que ce dernier est passé à autre chose depuis bien longtemps...

Et je n'ai pas trouvé d'exemple suffisamment explicite/clair sur LA bonne façon de faire...
A&N_L est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2011, 12h29   #6
Nouveau Membre du Club
 
Ayoub Ayb
Inscription : août 2010
Messages : 75
Détails du profil
Informations personnelles :
Nom : Ayoub Ayb

Informations forums :
Inscription : août 2010
Messages : 75
Points : 37
Points : 37
Bonjour ,

je ne sais pas pourquoi le code suivant ne m'affiche rien :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
<input value="click" type="button" onclick="update();"/>
<div id="divvr"></div>
 
<script >
 
function udpate(){
test.getA(function(data){
 
dwr.util.setValue("divvr",data);});}
 
 
</script>


sachant que test est le bean declaré dans dwr.xml et la methode getA() retourne une chaine de caratere

Code :
1
2
3
4
5
 
public String getA()
{
return "extjs";
}
et
ayoubkira est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 22/07/2011, 13h37   #7
Expert Confirmé Sénior
 
Avatar de RomainVALERI
 
Homme Romain VALERI
POOête
Inscription : avril 2008
Messages : 2 572
Détails du profil
Informations personnelles :
Nom : Homme Romain VALERI
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : POOête

Informations forums :
Inscription : avril 2008
Messages : 2 572
Points : 4 073
Points : 4 073
Citation:
Envoyé par ayoubkira Voir le message
sachant que test est le bean declaré dans dwr.xml
tu déclares une variable js dans ... un xml. ? Je ne vois pas bien comment elle va se téléporter dans le contexte de la page...
Citation:
Envoyé par ayoubkira Voir le message
Code :
1
2
3
4
function udpate(){
test.getA(function(data){
 
dwr.util.setValue("divvr",data);});}
Code java :
1
2
3
4
5
 
public String getA()
{
return "extjs";
}
pourquoi passer une fonction en paramètre à getA puisque cette dernière ne l'utilise pas et renvoie systématiquement la même chaine ? Et de toutes façons, le retour de la fonction getA n'est même jamais utilisé...
__________________

...pour les linguistes et les curieux >>> générateur de phrases aléatoires

__________________
RomainVALERI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2011, 15h45   #8
Nouveau Membre du Club
 
Ayoub Ayb
Inscription : août 2010
Messages : 75
Détails du profil
Informations personnelles :
Nom : Ayoub Ayb

Informations forums :
Inscription : août 2010
Messages : 75
Points : 37
Points : 37
ben c'est un tuto que j'ai suivi ...
Pour relier java avec extjs il faut passer par le framework dwr ( càd à travers le fichier dwr.xml)

Dans mon fichier dwr.xml , j'ai declaré mon bean selon la facon suivante :

Code :
1
2
3
4
5
6
 
  <create creator="spring"  javascript="test">
<param name="beanName"  value="Atest" />
</create>
 
<convert converter="bean" match="package.*"/>
et je veux utiliser test dans mon fichier .js

Comment faire!!!!
ayoubkira est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h28.


 
 
 
 
Partenaires

Hébergement Web