Vaadin - Actualisation de la grille après rangée de modification
Je créer grille simple avec les données de la base de données:
BeanItemContainer<Customer> container = new BeanItemContainer<>(Customer.class, customerRepository.findAll());
Grid grid = new Grid(container);
De modifier chaque ligne que le bouton a été créé:
Button edit = new Button("Edit", clickEvent -> openWindow((Customer) grid.getSelectedRows().iterator().next()));
Ce ouvrir une nouvelle fenêtre avec le formulaire de modification. Après toutes les modifications sont acceptées, je dois actualiser manuellement toute la page pour voir la modification de la Grille. Ma question est:
Comment actualiser uniquement Grille après modification d'une entrée de ligne?
Et comment enregistrer ces modifications à la base de données (peut-être beanItemContainer pourrait le faire)?
Voir Question similaire mais pour Vaadin 8 au lieu de 7.
OriginalL'auteur jsosnowski | 2015-08-06
Vous devez vous connecter pour publier un commentaire.
C'est un bug. Grille de ne pas mettre à jour lui-même, après que des modifications ont été réalisées dans le conteneur sous-jacent n'a de toute méthode raisonnable pour se rafraîchir. Il y a plusieurs hacks autour de cette question, c'est à dire
ou
SSCCE:
Possible de dupliquer Mise à jour de la Grille avec un nouvel ensemble de données, en Vaadin 7.4 application
clearSortOrder()
fonctionne parfaitement. En plus, pour quelqu'un qui veut actualiser une seule ligne, il ya quelques conseils: Vaadin ForumSi c'est un bug, vous avez la relative Vaadin bug tracker/lien?
github.com/vaadin/framework/issues/6542
OriginalL'auteur kukis
Avec Vaadin 8, la suite à des travaux d'actualisation de la grille après que les lignes ont été ajoutés ou supprimés, ou les données sous-jacentes a été changé:
si vous définissez les données avec setItems() pour commencer, alors oui puisque c'est crée un DataProvider qui encapsule la liste des éléments et si vous devez mettre à jour les éléments expliitly.
mais si vous utilisez un Fournisseur dynamique qui récupère des données à partir d'un magasin de données (par exemple, un SGBDR), puis le refreshAll() la méthode fonctionne comme annoncé.
OriginalL'auteur Harald Hetzner
Depuis Vaadin 7.7.4 il y a un
refreshRows(Object ... itemIds)
et unrefreshAllRows()
méthode de la grille: https://dev.vaadin.com/ticket/16765Il l'habitude de travailler quand j'ai posté cette réponse (presque un an). Si j'étais vous, je voudrais vérifier si les données sont à jour dans le conteneur.
Lorsque la Grille est désactivé, et les lignes sont ajoutées ou modifiées refreshAllRows() ne fonctionne pas, mais clearSortOrder() est ce que
OriginalL'auteur user1411778
J'ai dû appeler explicitement
grid.setItems()
après chaque appel àsaveListener
événement pour faire mon Vaadin 8.3 Grille d'actualiser les données à l'intérieur de la grille. Il est étrange que le visuel de la grille de l'état ne pas refléter les valeurs modifiées.Scala de mise en œuvre:
OriginalL'auteur kosiara - Bartosz Kosarzycki
Il y a un moyen de résoudre le problème de beaucoup mieux:
Vous devez obtenir la
BeanItem
du conteneur et de la transmettre à votre fenêtre de l'éditeur. Là, vous pouvez modifier le bean lui-même par asscessing c'chair laBeanItem
sProperies
. C'est très un travail manuel, donc je utiliser à la place toujours databindg deFieldGroup
appeler à l'bind
(champ, "propertyName"); où propertyName est la méthode de lecture sans obtenir et non de la majuscule.OriginalL'auteur Veselin M