为复杂的 Vaadin 组件实现 addValueChangeListener 的最佳方式?

Best way to implement `addValueChangeListener` for a complex Vaadin Component?

我有一个相当复杂的 Vaadin 组件,有七个不同的输入:

public class MyComponent extends VerticalLayout
    implements HasValue<ValueChangeEvent<MyPojo>, MyPojo> {

  private final ComboBox<String> _objectId = new ComboBox<>();
  private final TextField _accountId = new TextField();
  private final TextField _personId = new TextField();
  private final DatePicker _startDate = new DatePicker();
  private final DatePicker _endDate = new DatePicker();
  private final IntegerField _age = new IntegerField();
  private final NumberField _amount = new NumberField();

  private final Binder<MyPojo> _binder = new Binder<>();

  // more implementation ...
}

由于实现了接口,我还需要实现Registration addValueChangeListener(ValueChangeListener<? super ValueChangeEvent<MyPojo>> listener)实现它的最佳方法是什么?是否有一些自动化或我需要手动执行此操作,例如将我的基本输入字段方法 addValueChangeListener 链接到复杂的 ValueChangeListener<? super ValueChangeEvent<MyPojo>>?或者我能以某种方式使用 _binder 吗?

是的,您可以在活页夹上使用单个列表器。我处于类似的情况,为了避免声明过多的侦听器,每个绑定字段一个,我只是在活页夹上注册。 活页夹上有两个活动注册可用。一个用于任何绑定字段的更改,另一个用于触发一系列情况。 这里是 javadoc:https://vaadin.com/api/platform/21.0.8/com/vaadin/flow/data/binder/Binder.html

与其直接实现 HasValue 接口,我会推荐一种摘要 类,它可以帮助您了解所有细节。

在你的情况下,如果你想完全控制视觉表示,那可能是 AbstractCompositeField,或者如果你使用 Vaadin 来处理输入标签之类的事情,那可能是 CustomField