在基于 Vaadin 8 的应用程序中,我想实现一个删除所有字段值的命令。我已经使用 Binder 完成了此操作。当用户激活命令时,将创建一个新的 Bean。
@Override public void menuSelected(MenuBar.MenuItem selectedItem) {
controller.createNewBean();
Page.getCurrent().reload();
}
我想向用户显示一个消息框,警告如果继续操作,所有组件的所有值都将丢失。我用的是TabView,组件比较多
我只想在用户更改了至少一个组件的值时才显示此消息。
我想知道 Vaadin 是否有类似 UI.getCurrent().isDirty()
或其他机制来确定用户是否已向组件输入新值?
感谢帮助
最佳答案
我发现最有效的方法是向绑定(bind)器注册一个新的监听器,以获取组件值的任何更改的通知。
在此监听器中,我使用一个原子整数,每次更改都会增加该整数。 随后,使用这个原子整数,我决定用户是否已触及任何字段。
并非如此,这不会检测更改,但会检测修改(例如,用户可能多次更改字段值,但最终将该值设置为原始值)。
AtomicInteger counter = new AtomicInteger();
binder.addValueChangeListener((HasValue.ValueChangeListener<Object>) event -> counter.incrementAndGet());
确保在需要时重置计数器(例如在保存时)。
关于java - 如何确定 Vaadin 8 中 UI 中的组件是否已更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44524567/