Vaadin - Refresh-raster nach Zeile änderung
Ich einfache raster mit Daten aus der Datenbank:
BeanItemContainer<Customer> container = new BeanItemContainer<>(Customer.class, customerRepository.findAll());
Grid grid = new Grid(container);
Bearbeiten jede Zeile der button erstellt wurde:
Button edit = new Button("Edit", clickEvent -> openWindow((Customer) grid.getSelectedRows().iterator().next()));
Diese öffnen neue Fenster mit edit-Formular. Nachdem alle änderungen übernommen, ich muss manuell aktualisieren, ganze Seite, um zu sehen, änderungen am Raster. Meine Frage ist:
Wie refresh, nur Gitter nach der änderung jeder Zeile ein Eintrag?
Und wie speichern Sie diese änderungen an der Datenbank (vielleicht beanItemContainer es tun könnte)?
- Siehe ähnliche Frage, aber für Vaadin 8 statt 7.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es ein bug. Gitter nicht selbst aktualisieren, nachdem änderungen vorgenommen wurden in der zugrunde liegenden container auch keine angemessene Methode zu aktualisieren. Es gibt mehrere hacks um dieses Problem also
oder
SSCCE:
Möglich doppelte Update-Netz mit einem frischen Satz von Daten, in Vaadin 7.4 app
clearSortOrder()
funktioniert perfekt. Außerdem für jeden, der will, aktualisieren Sie nur eine Zeile, es gibt noch einige Hinweise: Vaadin ForumMit Vaadin 8, die folgenden Werke zum aktualisieren der Startaufstellung nach Zeilen Hinzugefügt oder entfernt wird oder die zugrunde liegenden Daten geändert worden:
Da Vaadin 7.7.4 es ist ein
refreshRows(Object ... itemIds)
und einrefreshAllRows()
Methode im Netz: https://dev.vaadin.com/ticket/16765Musste ich explizit aufrufen
grid.setItems()
nach jedem AufrufsaveListener
Ereignis zu machen, meine Vaadin 8.3 Grid aktualisieren von Daten innerhalb des Gitters. Es ist merkwürdig, dass die visual-grid-Staat nicht nicht reflektieren bearbeiteten Werte.Scala-Implementierung:
Es ist ein Weg, um das problem zu lösen viel besser:
Haben Sie, um die
BeanItem
aus dem container und übergeben Sie diese zu Ihrem editor-Fenster. Dort können Sie die bean selbst durch asscessing es durch dieBeanItem
sProperies
. Dies ist eine sehr manuelle Arbeit, damit ich stattdessen immer databindg vonFieldGroup
- einfach anrufenbind
(Feld, "propertyName"); wobei propertyName ist der getter-Methode ohne bekommen und nicht Großbuchstaben.