[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:
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:
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:
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 ?