web-dev-qa-db-fra.com

Comment puis-je forcer Vaadin V8 à mettre à jour l'écran?

J'ai une petite application Vaadin V8 comportant plusieurs champs de saisie (ComboBoxes, SelectGroups, etc.). Le contenu de la plupart d'entre eux est déterminé par la teneur choisie de la première combinaison. Cependant, lorsque je sélectionne quelque chose, tous les autres restent en blanc jusqu'à ce que je clique sur un, à quel point ils se mettent tous à jour. Ce n'est pas le comportement souhaité, mais je suppose que cela est causé par le côté serveur étant à jour, mais ne mettant pas à jour la vue côté client. (Même lors de l'ajout de demandeRepaint () dans ma première valeur de valeur de ComboBox)

Il doit y avoir une méthode pour forcer Vaadin à obtenir les données que je souhaite qu'il affiche même si aucun autre composant n'est cliqué?

Modifier Je ne suis pas autorisé à poster des réponses à ma propre question si bientôt, alors je le mettez ici temporairement:

J'ai trouvé qu'il y a une méthode JavaScript qui synchronise le client et le serveur.

myComponent.getApplication().getMainWindow().executeJavaScript("javascript:vaadin.forceSync();");

Le seul problème que j'ai maintenant, c'est que l'appréciation sur l'une de mes comboBoxes ne tire toujours que lorsque je clique sur une autre ComboBox (ou le même deux fois). C'est la chose la plus étrange que la deuxième comboquox, lorsqu'elle est chargée, tire parfaitement l'événement.

17
Valyrion

Est la première combinaison en mode "immédiat"?

Sinon, cela devrait probablement être: composant.setimmediate (vrai).

Voir https://vaadin.com/book/-/page/components.selection.html

18
Charles Anthony

J'ai eu le même problème, voir ci-dessous comment cela pourrait être fait dans la version 8.0.5 (à partir de 2017):

@Push
public class WebUi extends UI {
   public void fireComponentUpdated() {
      getUI().Push();
   }
}
5
Thomas

Vous pouvez utiliser un piratage si vous avez défini une source de données pour vos composants qui oblige Vaadin à les restituer. J'utilise ceci pour mettre à jour des tables qui ont des données dynamiques

yourcomponent.setContainerDataSource(yourcomponent.getContainerDataSource());
4
Marthin

Avez-vous demandé-vous sur les composants corrects?

N'oubliez pas que requestRepaint marque le composant aussi sale mais ne signifie pas qu'il sera repeint - un client ne peut être actualisé que lorsque cela apporte une demande au serveur.

Voir ce fil https://vaadin.com/forum/-/message_boards/view_message/231271 Pour plus d'informations sur vos options (il traite des rafraîchissements d'interface utilisateur en raison du traitement du fil d'arrière-plan).

2
Ryan Schipper

à Vaadin 7 Il suffit de mettre cette ligne dans la méthode UI.Init principale (VaadinRequest):

UI.getCurrent().setPollInterval( 1000 );

si vous souhaitez actualiser votre UI (dans ce cas) chaque seconde. De cette façon, vous demandez à l'interface utilisateur de sonder le serveur pour des modifications de l'intervalle défini.

Méfiez-vous, le trafic de serveurs excessives peut être un problème si vous avez beaucoup d'utilisateurs qui utilisent votre application en même temps.

à Vaadin 6 Vous devrez jouer avec ProgressIndicator (qui pourrait être invisible si vous le souhaitez) et essayer de faire le même quels ui.getCurrent (). Setpollinterval (int) à Vaadin 7.

1
user2310395