2017-06-04 3 views
0

Hallo allerseits, mein Problem ist, dass mein Grid Daten nicht aktualisiert.Aktualisieren von Daten in Vaadins Grid

Ich habe einen Thread, die neue Werte aus einer Datenbank abrufen, aber wenn ich den neuen DataProvider aus der Auflistung zuweisen, die neue Werte erhalten, ändert das Raster nichts.

Zum Beispiel enthält das Grid die Aufträge von Clients, alle 30 Sekunden eine Thread-Suche, wenn neue Aufträge verfügbar sind, dann erhalten Sie alle Aufträge in einer ArrayList und setzen die neue ArrayList im DataProvider des Grids, aber das Grid wird fortgesetzt mit den gleichen Werten wie zuvor.

Wie kann ich Daten im Grid aktualisieren, ohne die gesamte Webseite zu aktualisieren?

Entschuldigung für mein Englisch

Vielen Dank.

+0

Hallo und SO begrüßen. Es ist schwierig, nur aus Ihrer Beschreibung zu sprechen, ohne den Code zu sehen. Es wäre sehr hilfreich, wenn Sie uns eine [sscce] (http: // sscce.org), so dass wir sehen können, ob Sie Push oder Poll verwenden, die Vaadin - Version, was Sie vielleicht in der Konfiguration übersehen haben, etc. Eine einfache App ohne sensible Daten und basierend auf einigen zufällig generierten/simulierten Daten (keine DB Interaktion). Wenn Sie auf einen Kommentar antworten, können Sie auch @username verwenden, um eine Benachrichtigung zu erhalten. – Morfic

Antwort

2

Poll

Sie Browser so einstellen können Server für Updates mit bestimmten Intervall zu überprüfen. Ich habe ein paar Codebeispiele hinzugefügt, um das Abrufintervall dafür zu verwenden.

Zum Beispiel, wenn Sie der Browser alle 30 Sekunden aktualisiert werden soll, dann können Sie Abfrage wie folgt aktivieren:

MyUI ui = getMyUi(); 
ui.setPollInterval(30000); 
if (ui.isPollListenerRegistered()) { 
    Registration r = ui.addPollListener(this::reloadFromDatabase); 
    ui.setPollRegistration(r); 
} 

pollInterval Einstellung auf den Wert größer als -1 macht Browser-Server mit der gegebenen Verzögerung zu nennen. Wenn Sie einen Poll-Listener hinzufügen, können Sie diese Prüfungen auf dem Server bemerken und von der Datenbank laden.

Wenn nur 1 Seite wie folgt aktualisiert werden muss, fügen Sie auch einen Navigationslistener hinzu, der das Abrufintervall auf -1 zurücksetzen kann, damit andere Seiten keine unnötigen Pollereignisse senden.

Es gibt einige Dokumentation in Vaadin Wiki, aber Sie benötigen keinen Hintergrundthread, wenn Sie Werte aus der Datenbank lesen können.

https://vaadin.com/wiki?p_p_id=36

Push-

Vaadin über Push Sie Daten im Hintergrund aktualisieren und fordern dann nur Clients, die aktualisieren aktualisiert werden soll. Auf diese Weise können Sie Anforderungen optimieren, da Clients keine unnötigen Abfragen durchführen. Sie können auch einzelne Anfragen haben, um Daten vom Web-Service zu erhalten und dann alle Clients mit den gleichen Daten zu aktualisieren.

Mehr erfahren Sie in Vaadin Dokumentation lesen:

https://vaadin.com/docs/-/part/framework/advanced/advanced-push.html

ich ein Beispielprojekt geschoben, das zeigt, wie einen einzelnen Wiederholungs Hintergrund-Thread verwenden, um Daten aktualisiert zu tun und dann Inhalt eines Raster aktualisiert damit . Es gibt mehr als nur ein paar Zeilen Code für ein komplettes Push-Beispiel, so dass Sie den Code finden Sie hier:

https://github.com/m1kah/vaadin-grid-push

+0

Vielen Dank, ich werde es testen, und ich brauche es mit einem Thread, weil ich die Daten aus einem WebService extrahieren. –

Verwandte Themen