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 ?