有没有办法在活页夹的特定字段上添加类似值更改侦听器的东西?

Is there a way to add a something like a value change listener on specific field in binder?

我需要在我的界面中添加对 TextField 和 ComboBox 更改的反应。

Binder 是在 Vaadin 中处理数据绑定的便捷方式。

我无法在 textField.addValueChangeListener(...) 上使用,因为它是在绑定模型中设置新值之前调用的。

有没有办法在活页夹的特定字段上添加类似值更改侦听器的东西?

我可以使用 binder.addValueChangeListener() 但它会在每次绑定字段更改时触发,我无法轻易区分它们。

理想情况下,应该是这样的:

binder.forField(specificTextField)
    .withConverter(...)
    .withValidator(...)
    .bind(Person::getName, Person::setName)
    .addValueChangeListener(...); // nonexistent functional

对于是否有办法将值更改侦听器添加到单个绑定本身的问题,答案是否定的。我同意这可能是 Flow API 的一个很酷且有用的补充。请继续在他们的 github

中写一个问题

但是,正如您自己注意到的那样,有一种方法 Binder::addValueChangeListener 是一种区分它们的方法。接受的 eventListener 有一种方法可以获取触发更改事件的 HasValue(a.k.a。绑定的输入字段)。它还可以访问旧值和新值。

TextField tf = new TextField();
ComboBox cb = new ComboBox();
// todo: binding of fields

binder.addValueChangeListener(valueChangeListener -> {
    if(valueChangeListener.getHasValue().equals(tf)){
        // tf value changed
    } else if(valueChangeListener.getHasValue().equals(cb)) {
        // cb value changed
    }
}