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

GWT et Vaadin Java Discussion :

[GWT2.3] Capture de l'event : close the window


Sujet :

GWT et Vaadin Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 230
    Par défaut [GWT2.3] Capture de l'event : close the window
    Bonjour,

    Je suis en train de développer une application en GWT 2.3.
    Mon besoin : lorsque l'utilisateur quitte l'application(F5, fermeture de l'onglet comportant l'application ou fermeture de la fenêtre) je dois aller enregistrer une info dans la base de données avec RPC et hibernate...passons le problème n'est pas là.
    Je n'ai pas besoin de l'historisation dans mon application, un click sur le bouton back ou forward : l'utilisateur est délogué : conforme à ma spécification.

    Mon idée était:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Window.addCloseHandler(new CloseHandler<Window>() {
    @Override
    public void onClose(CloseEvent<Window> event) {
    				//appel rpc pour mettre une info en base de données
    			}
    		});
    Je teste le plus souvent avec firefox et pas de soucis avec ce code, l'info est toujours bien mise en base de données.
    Par contre, c'est là mon problème avec Chrome, cela ne marche pas !

    Quelqu'un aurait-il une idée, un conseil ou voir une autre manière de faire...
    merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 230
    Par défaut
    Tout marche bien sur IE et Firefox par contre le problème est le même pour Chrome et Safari.

    Le problème c'est l'appel RPC dans la methode onClose(CloseEvent<Window> event).

    j'ai vraiment du mal à voir ce qui se passe techniquement....
    help...
    tout aide, conseils sont les bienvenus.
    merci

  3. #3
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2011
    Messages : 51
    Par défaut
    Hello,

    J'ai testé avec la version 2.4 et 2.5 avec chrome, firefox et ie et cela fonctionne sans problème.

    Pourquoi ne pas mettre à jour la version de GWT ?

    Maxime

  4. #4
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2011
    Messages : 51
    Par défaut
    petite précision, le callback doit être de type void :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (...)
    async.greetServer("hello", new AsyncCallback<Void>() {
    (...)
    Maxime

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 230
    Par défaut
    merci pour les infos.
    Le passage à la version 2.4 voir 2.5RC?
    j'ai trouvé sur le net
    http://code.google.com/p/google-web-...detail?id=7238

    je.... un peu refroidi pour commencer par cette solution. je risque d'être dessus de la manip, non??
    en fait je ragarde aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Window.addWindowClosingHandler(new Window.ClosingHandler() {
    			@Override
    			public void onWindowClosing(ClosingEvent event) 
    			{
                             //envoi RPC
    });
    j'ai l'impression que Chrome fait appel à cet evenement?? bizarre...par contre il fait appel aussi à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Window.addCloseHandler(new CloseHandler<Window>() {
    @Override
    public void onClose(CloseEvent<Window> event) {
    				//appel rpc pour mettre une info en base de données
    			}
    		});
    mais le code à l'intérieur n'est pas exécuté. en plus pas facile de bien voir le problème en mode prod car j'utilise les logs GWT(cote client) avec log4j mais là aussi c'est un appel RPC de plus...
    tu connais la différence entre les 2 ????
    pour les appels RPC
    petite précision, le callback doit être de type void :
    j'utilise le pattern command avec l'api GWT-dispatch afin d'accèder par l'intermédiaire d'Hibernate avec Spring aux données. Les actions renvoient tjrs un object, ici un objet vide. Le problème c'est la réponse de l'appel RPC ???
    Dans mon cas, avant la fermeture, j'envoie des données dans la base sans rien récupérer : un appel RPC, c'est là le problème le code qu'on peut mettre dans ces evenements ci-dessus?? tout ça pour indiquer en base la déconnexion de l'utilisateur.

    je me perds un peu peut-être mais la gestion différente entre navigateurs devient galère : IE, FF, Chrome, Safari.

    tout aide complémentaires sont les bienvenus...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 230
    Par défaut
    aprés pas mal de test avec les différents navigateurs du web avec la version la plus récente(IE, Firefox, Chrome, Safari), il me reste encore un problème avec seulement Safari.

    Spécification : qd l'utilisateur recharge la page(exemple : F5), ou clique sur le bouton Back ou sur le bouton Forward du navigateur, l'application(mon application n'a pas besoin de l'historique !) doit déconnecter automatiquement l'utilisateur et revenir à la page de login, au départ.

    Quand l'utilisateur tape la touche F5, ou le bouton back ou le bouton Forward sur SAFARI, les 2 événements(Window.addWindowClosingHandler et Window.addCloseHandler) ne sont jamais appelées alors qu'avec les autres navigateurs : OUI !

    C'est bizarre, non ?

  7. #7
    Membre expérimenté
    Avatar de karbos
    Inscrit en
    Novembre 2008
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 155
    Par défaut
    Salut,
    Aujourd'hui on est à la 2.5.0-final tu as fais le test ?

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 230
    Par défaut
    Non, tu as raison je n'ai pas fait le même test avec GWT 2.5.

    Le problème : les différents trucs que j'ai lu sur le contenu de cette nouvelle version ne mentionnaient pas ce problème avec SAFARI....ou alors ...je n'ai pas bien lu....

  9. #9
    Membre expérimenté
    Avatar de karbos
    Inscrit en
    Novembre 2008
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 155
    Par défaut
    Effectivement, et puis le rapport de bug dont tu fournis le lien est clair :
    This is how browsers work, there's nothing GWT can do.
    ==> C'est comme ça que les navigateurs fonctionnent. GWT n'y peut rien
    Je vois bien une solution, mais je crois que ça va pas te plaire : MVP...
    Ils ont enfin mis à jour la documentation : https://developers.google.com/web-to...itiesAndPlaces
    Bon courage !

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 230
    Par défaut
    Ils ont enfin mis à jour la documentation : https://developers.google.com/web-to...itiesAndPlaces
    Au vue de l'avancement de mon application, je ne peux pas me permettre de mettre cela en place maintenant, car pas besoin de l'historique et je ne sais pas si cela règlerait mon problème de Logout d'application par l'utilisateur. J'ai un MVP "maison" pour structurer mon application, possibilité de faire des vues différentes en fonction du terminal..etc....

    A force de chercher, mon problème se situe spécifiquement au niveau de cette méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Window.addCloseHandler(new CloseHandler<Window>() {
    @Override
    public void onClose(CloseEvent<Window> event) {
    				//appel rpc pour mettre une info en base de données
    			}
    		});
    je veux réaliser un logout de l'application et envoyer au serveur l'information que l'utilisateur vient de se déconnecter de l'application.
    Un appel RPC à l'intérieur de cette méthode n'a aucun effet, l'application est COMPILE et déployé sur Tomcat(comportement peut-être différent en mode Dev sous eclipse ?)
    J'ai réalisé une petite application en mettant dans mes services côtés serveur des log avec log4j; ces logs vont s'écrire dans un fichier de log côté serveur. Un truc tout simple afin de voir réellement si mon service RPC réalise le boulot demandé. Bien entendu, ces services ne renvoient aucune valeur : Void.

    Avec IE et Firefox pas de soucis mais
    avec Chrome et Safari qd tu fais un refresh....touche F5 par exemple ou bouton Back du navigateur ; résultat aucun log qui s'affiche.
    je ne comprends pas trop pourquoi dans ce cas là et avec ces navigateurs cela ne fonctionne pas??

    l'idée serait peut-être de mettre dans cette méthode un système de Timer qui attendrait le onSuccess du RPC pour finaliser l'action onClose......mais je ne vois pas bien comment et si c'est possible dans ce cas du côté client ???

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/01/2014, 12h06
  2. WinPcap: The Windows Packet Capture Library
    Par forum dans le forum Téléchargez
    Réponses: 0
    Dernier message: 30/06/2011, 10h47
  3. MDIChild et event Closing
    Par Xarik dans le forum Windows Forms
    Réponses: 4
    Dernier message: 05/02/2011, 20h54
  4. Problème event Closing en mode OOB
    Par CRNice dans le forum Silverlight
    Réponses: 4
    Dernier message: 15/07/2010, 14h48
  5. warning : 1 client is using or hasn't closed the table properly
    Par maniaco_jazz dans le forum Administration
    Réponses: 0
    Dernier message: 22/06/2009, 18h54

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