2010-11-29 33 views
3

Je suis nouveau à vaadin. Comment puis-je faire autocomplete (en fait, plus comme google suggérer) sur un énorme ensemble de données qui ne peuvent pas être chargées en mémoire, mais plutôt effectuer une requête JPA sur chaque événement clé. Est-il possible de capturer des événements clés sur un champ de texte ou une zone de liste déroulante?saisie semi-automatique dans vaadin?

Vive

+0

Vous pouvez commencer seulement votre fonction de saisie semi-automatique après 3 ou si des lettres ont été saisis (si possible), de sorte que vous n'obteniez pas une énorme liste retournée. Et ne pas afficher l'ensemble des suggestions à l'utilisateur.Juste quelques réflexions générales sur la saisie semi-automatique. –

+0

http://jtechnoprojects.blogspot.com/2011/08/style-definitions-table.html –

Répondre

3

Vous pouvez consulter le SuperImmediateTextField de Henrik Paul, qui est un add-on Vaadin qui vous permet de définir le délai de post-traitement client-serveur en quelques secondes. À partir de là, c'est la pile Java commune pour obtenir le flux le plus lisse possible. Mise en cache, demandes JPA ou autre. Un retard de deux secondes réduira au moins légèrement la charge du côté serveur.

0

Vous pouvez trouver cette link utile. Je suppose que cela se corrige en 6.5. Il y a aussi un addon si vous voulez vérifier.

vous devez considérer ce que

valeur du champ -> JSON -> servlet Vaadin -> Service (printemps/ejb/POJO ou autre) -> JPA -> query -> la liste des résultats (qui peut être énorme initialement)

et cela tout le chemin du retour au navigateur pour chaque pression de touche ...

penser à la vitesse de frappe de l'utilisateur final. Au moment où la réponse de la première frappe revient du serveur, l'utilisateur peut avoir terminé le mot entier.

0

Si vous ne voulez pas écrire un widget-côté client personnalisé ou inclure un autre add-on, vous pouvez modifier la zone de liste déroulante de Vaadin un peu pour le faire charger des suggestions de la base de données . Vous avez essentiellement trois choses à faire pour y parvenir:

  1. com.vaadin.ui.ComboBox de sous-classe et remplacer sa méthode protégée # ComboBox buildFilter() avec votre propre mise en œuvre.
  2. Implémenter l'interface com.vaadin.data.Container.Filter avec très fonctionnalité restreinte: votre filtre doit uniquement transporter l'entrée utilisateur actuelle .
  3. Écrivez une implémentation de com.vaadin.data.Container qui exécute la logique de filtrage actuelle.

J'ai décrit comment faire cela plus en détail in a blog post.

0

caisse peut-être cette addon: https://vaadin.com/directory#!addon/suggestbox-add-on

est livré avec:

retard

pour la communication du serveur, par exemple attendre jusqu'à ce que l'utilisateur fini de taper pour n miliseconds

texte d'espace réservé comme « tapez votre requête ici »

longueur minimale pour l'entrée pour interroger le serveur