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 :

[GWT-Ext] ComboBox et Store : Appel à un service asynchrone


Sujet :

GWT et Vaadin Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    BiM
    BiM est déconnecté
    Expert confirmé
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Par défaut [GWT-Ext] ComboBox et Store : Appel à un service asynchrone
    Bonjour,

    J'ai une ComboBox qui doit être automatiquement remplie par un service. Cependant, je ne sais pas comment faire ça.

    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ComboBox maCombo = new ComboBox();
     
    maCombo.setMinChars(3);
    maCombo.setValidationDelay(2000);
    maCombo.setWidth(300);
    maCombo.setListWidth(getWidth()*2);
    maCombo.setReadOnly(false);
    maCombo.setHideTrigger(true);
    maCombo.setMode(ComboBox.REMOTE);
    maCombo.setResizable(true);
    maCombo.setLoadingText("Chargement ...");

    Donc comme on voit ici, l'action ne doit se déclencher qu'à partir de 3 caractères saisis et 2 secondes sans action.

    Je voudrais alors pouvoir appeler mon service en mode Asynchrone et mettre à jour le contenu de mon Store par rapport à ses trois caractères. D'autre part, cela veut dire que la ComboBox ne cherche pas elle-même dans mon Store les résultats qui peuvent correspondre à la recherche (puisque ce sont déjà les bons).

    Comment puis-je faire ? Je suis un peu perdue avec GWT-EXT...

    Pour l'instant j'ai fait ceci :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    final SimpleStore store = new SimpleStore(new String[] {"label", "email"}, new Object[0][2]);
    store.setDefaultSort("label", SortDir.ASC);
    store.setAutoLoad(true);
    store.load();
     
    maCombo.setStore(store);
    J'initialise donc avec un Store vide dans un premier temps

    Code Java : 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
    maCombo.addListener(
    	new ComboBoxListenerAdapter() {
    		@Override
    		public void onValid(Field field) {
    			final String value = getRawValue();
     
    			if (value.length() >= 3 && (lastValue == null || !value.contains(lastValue))) {
    				lastValue = value;
     
    				service.search(
    					value,
    					new AsyncCallback<Set<CUtilisateur>>() {
    						public void onFailure(Throwable exception) {
    							Window.alert("FAILURE");
    						}
     
    						public void onSuccess(Set<CUtilisateur> users) {
    							Window.alert("SUCCESS");
    							Object storeUsers[][] = new Object[users.size()][2];
     
    							for (final CUtilisateur user : users) {
    								storeUsers[storeUsers.length] = new Object[] { user.getLabel(), user.getEmail() };
    							}
     
    							store.setDataProxy(new MemoryProxy(storeUsers));
    							maCombo.setStore(store);
    							maCombo.expand();
    						}
    					}
    				);
    			}
    		}
    	}
    );

    PS : Je ne connais pas les versions de GWT et GWT-EXT utilisées, comment puis-je les connaître à votre avis ?

  2. #2
    Membre actif
    Inscrit en
    Novembre 2006
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 129
    Par défaut
    Il me semble que GWTExt ne te permet pas de peupler tes stores depuis un RemoteService GWT... Tu as plusieurs solutions :

    Soit en écrivant des servlets Java qui vont t'envoyer les données en XML ou JSON puis attacher un Reader (XMLReader ou JSONReader) à ton Store.

    Soit en "normalisant" le résultat de tes RemoteServices (ou en le convertissant côté client) au format requis par des ArrayReader, à savoir des entrées de type Object[][] .

    Sinon, voir du côté de GWTPlus : http://gwtplus.gwt-ext.com/ qui permet d'abstraire celà. Malheureusement, cette bibliothèque est payante.

    Ou tout simplement en passant à GXT (ExtGWT) qui permet tout cela en natif (et bien plus encore!)... Mais payant aussi, à moins que ton projet soit compatible GPLv3.

  3. #3
    BiM
    BiM est déconnecté
    Expert confirmé
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Par défaut
    Bonjour,

    Déjà que le projet est hors standards donc on ne va pas pousser en rajoutant encore d'autres bibliothèques (payantes de sucroît ).

    Merci pour ta réponse.

    Je me suis effectivement rabattue sur un appel que je qualifierais de "moche" en HttpProxy qui me renvoie des objets JSON.

    Par contre j'ai une question subsidiaire. Côté serveur, j'utilise les objets JSON de GWT. Dans mon [module].gwt.xml j'ai bien le inherits pour JSON mais je pense que ce n'est utile que côté client.

    Côté serveur, il ne connaît visiblement pas les objets JSON de GWT :
    • Est-ce que je dois ajouter la librairie gwt-user.jar côté serveur ? Est-ce propre ?
    • Est-ce que je dois utiliser d'autres objets équivalents ?
    • Ou bien il y a une autre solution ?

  4. #4
    Membre actif
    Inscrit en
    Novembre 2006
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 129
    Par défaut
    Eh non tu ne pourras pas les importer côté serveur car le package com.google.gwt.json.client contient des appels à des méthodes natives via JSNI... Tout ce que tu peux utiliser de GWT côté serveur se trouve dans l'archive gwt-servlet.jar.

    Par contre, du côté serveur, tu peux utiliser les libs Java de ton choix, et y en a un bon paquet qui permettent de générer/traiter du JSON (voir liste sur json.org).

    Sinon, XML...

  5. #5
    BiM
    BiM est déconnecté
    Expert confirmé
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Par défaut
    Citation Envoyé par palnap Voir le message
    Eh non tu ne pourras pas les importer côté serveur car le package com.google.gwt.json.client contient des appels à des méthodes natives via JSNI... Tout ce que tu peux utiliser de GWT côté serveur se trouve dans l'archive gwt-servlet.jar.

    Par contre, du côté serveur, tu peux utiliser les libs Java de ton choix, et y en a un bon paquet qui permettent de générer/traiter du JSON (voir liste sur json.org).

    Sinon, XML...
    Oui j'étais déjà allée sur ce site mais il y a trop de choix. En as-tu une à me préconiser ?

  6. #6
    Membre actif
    Inscrit en
    Novembre 2006
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 129
    Par défaut
    J'ai jamais trop utilisé de JSON en dehors de JavaScript, mais la première (http://www.json.org/java/index.html) semble très simple à utiliser, il suffit d'instancier un JSONObject en passant ton bean Java en paramètre au constructeur et de récupérer la version "JSONisée" en appelant la méthode toString().

    Par contre, la lib utilise l'introspection de Java pour aller chercher les getters et setters de ton bean (ou les membres publics), du coup en perfs ça doit pas être terrib'. J'ai pas non plus l'impression que tu puisses en déclarer de "transient" comme dans une sérialisation standard Java ou dans JPA.

Discussions similaires

  1. [GWT, GWT-EXT] Bug alignement ComboBox
    Par k o D dans le forum GWT et Vaadin
    Réponses: 8
    Dernier message: 24/07/2009, 11h26
  2. Client JAVA pour appeler un service RPC GWT
    Par pip1000 dans le forum GWT et Vaadin
    Réponses: 1
    Dernier message: 25/05/2009, 08h11
  3. erreur lors de l'appel de service GWT avec Spring
    Par decksroy dans le forum GWT et Vaadin
    Réponses: 2
    Dernier message: 06/05/2009, 19h20
  4. gwt ext : une suite de ComboBox
    Par touille dans le forum GWT et Vaadin
    Réponses: 3
    Dernier message: 17/07/2008, 17h07
  5. gwt-ext : remplir un grid avec un remote service!
    Par touille dans le forum GWT et Vaadin
    Réponses: 2
    Dernier message: 01/07/2008, 15h05

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