首页 > 解决方案 > Vaadin Flow 恢复/撤消值更改而无需再次触发侦听器

问题描述

(使用 Vaadin 18)

我在打开确认对话框的组合框中有一个值更改侦听器,允许用户确认更改。因为这是在值更改侦听器中,所以该值在技术上已经更改。因此,当他们选择“否”时,我需要恢复该值。除了手动设置值之外,似乎没有任何 API 部分可以执行此操作。

但是当通过 setValue(...) 恢复时,侦听器会再次触发。我需要防止它再次开火。目前,我能够做到这一点的唯一方法是使用额外的“ignoreNextChange”布尔变量,它可以防止逻辑第二次运行。有没有更简单的方法来做到这一点?无论如何,我看不到添加一个在值更改之前触发的侦听器。

我不能简单地忽略所有非客户端更改,因为这会破坏活页夹。并且更改侦听器注册在侦听器内部不起作用,因为我还需要将其添加回来,这无论如何都会导致它触发。

标签: javavaadinvaadin-flow

解决方案


您可以正确地假设,您无法阻止更改在值更改处理程序中的传播(它是在事后发生的)。

您的主要选择是:

  • 您只对“人为”更改(来自客户)做出反应。在 `ValueChangeEvent 中查看 isFromClient

  • 或者将 UI 与操作分离(给用户一些 UI 以请求更改,再次询问,然后进行更改)——这可以通过多种方式完成。一种方法是编写自己的字段来包装组合框,并且只有在确认选择后才触发更改。


推荐阅读