【问题标题】:Best way to implement `addValueChangeListener` for a complex Vaadin Component?为复杂的 Vaadin 组件实现“addValueChangeListener”的最佳方法?
【发布时间】:2022-01-11 14:48:15
【问题描述】:

我有一个相当复杂的 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&lt;? super ValueChangeEvent&lt;MyPojo&gt;&gt; listener) 实现这个的最好方法是什么?是否有一些自动化或我需要手动执行此操作,例如将我的基本输入字段方法addValueChangeListener 链接到复杂的ValueChangeListener&lt;? super ValueChangeEvent&lt;MyPojo&gt;&gt;?或者我可以以某种方式使用_binder 吗?

【问题讨论】:

    标签: java user-interface vaadin event-listener


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      比起直接实现HasValue 接口,我会推荐一个抽象类来帮助你处理所有细节。

      在您的情况下,如果您想完全控制视觉表示,则可能是 AbstractCompositeField;如果您是 Vaadin 处理输入标签之类的事情,则可能是 CustomField

      【讨论】:

        猜你喜欢
        • 2018-07-11
        • 1970-01-01
        • 2019-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多