2017-06-13 7 views
0

Dans une application basée sur Vaadin 8, je souhaite implémenter une commande qui supprime la valeur de tous les champs. J'ai fait ceci Using Binder. Lorsque l'utilisateur active la commande, un nouveau bean sera créé.Comment déterminer si un composant de l'interface utilisateur a été mis à jour dans Vaadin 8

@Override public void menuSelected(MenuBar.MenuItem selectedItem) { 

    controller.createNewBean(); 
    Page.getCurrent().reload(); 

} 

Je veux montrer une boîte de message à l'utilisateur qui avertit qu'en procédant toutes les valeurs pour tous les composants seront perdus. J'utilise un TabView et il y a relativement beaucoup de composants.
Je souhaite afficher ce message uniquement si l'utilisateur a modifié une valeur pour au moins un composant. Je me demande si Vaadin a quelque chose comme UI.getCurrent().isDirty() ou un autre mécanisme pour déterminer si l'utilisateur a entré une nouvelle valeur à un composant?

Merci pour l'aide

Répondre

0

Vous voudrez peut-être utiliser binder.hasChanges(). Cela vérifie essentiellement si vos champs et le bean sous-jacent lié aux champs diffèrent à cause des interactions de l'utilisateur.

De Docs de Vaadin:

Vérifiez si l'une des valeurs des champs liés ont changé depuis le dernier appel explicite à setBean (Object), readBean (Object), removeBean(), writeBean (Object) ou writeBeanIfValid (Objet).

Voir Vaadin's API et le chapitre de Vaadin Doc Binding Data to Forms pour plus d'informations.

Avec Page.getCurrent().reload() vous obtenez une nouvelle interface utilisateur et tous vos composants sont réinitialisés comme si vous ouvriez un nouvel onglet. Pour la réinitialisation de vos composants, je recommande d'utiliser binder.readBean(theNewBeanWithFreshValues). Cela définit les valeurs des champs liés aux valeurs du bean.

+0

Merci @Axel Meier. Il semble que le seul moyen est binder.hasChanges(). Le problème est que j'ai différents haricots et différents onglets et je dois être conscient de beaucoup de liants. J'utilise reload au lieu de readBrean à cause de cela aussi. – Govan

+0

J'ai testé la mise en œuvre avec des changements de classeur. Cela ne fonctionne pas comme décrit dans la documentation. Voir ceci: https://vaadin.com/forum/#!/thread/14906891/15007809 – Govan

+0

@Govan Merci pour vos commentaires. En effet 'hasChanges()' a plus de sens à utiliser en combinaison avec 'readBean()' et 'writeBean()'. Avec 'setBean()' les modifications sont automatiquement validées 'hasChanges()' retournerait false. Aussi avec 'setBean()' il n'y a plus moyen de restaurer les anciennes valeurs. –