java - 如何确定 Vaadin 8 中 UI 中的组件是否已更新

标签 java web-applications vaadin vaadin4spring vaadin8

在基于 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/

相关文章:

iis - Global.asax 事件没有被引发

java - 如何将文本添加到新行

java - 如何将 Controller 与表单集成(Hibernate Spring Vaadin)

java - 在网页中搜索..Android

java - 在同一个数据包中提交两个表单

java - 自定义 JComponent 边界等于容器尺寸

java - Spring Cloud 流卡夫卡暂停/恢复 Binder

database-design - 商业Web应用--可扩展的数据库设计

vaadin - 使用 Vaadin 完全导出 CSV 文件后显示通知

java - 当将 `openjdk:11` 或 `openjdk:8` 与 CGroup 的实验标志一起使用时,是否仍需要 `-Xmx`