处理更复杂的表单

Handling more complex forms

在我当前的项目中,我必须处理更复杂的表单。如果特定字段(我将其命名为 'C')收到用户输入,字段(我将其命名为 'A' 和 'B')将自动填充。而且如果用户在字段 A 中输入数据,字段 B 和 C 也会自动填写。

(这只是一个简单的例子,目前的逻辑有点复杂)

我需要注意的是没有循环发生(C -> A -> C -> A -> ...)。所以我现在需要知道当前值的变化是由于用户输入还是另一个字段收到输入然后触发了当前字段的值变化。在第二种情况下,我现在还需要知道哪个字段恰好触发了值更改,因为那时我必须触发与 who/what 对应的其他特定操作触发了该值更改。

在 Vaadin 中处理 valueChange 事件有点麻烦,因为它总是会触发,无论用户是否更改了某些内容,或者应用程序是否在组件上使用了 setValue(....)。

唯一的解决方案是记住在应用程序中执行 setValue(....) 然后禁用其他组件中的触发代码。

例如在这种情况下(死循环):

field1.addValueChangeListener( field2.setValue('Updated by field1');
field2.addValueChangeListener( field1.setValue('Updated by field2');

改成这样:

boolean inTrigger= false;

field1.addValueChangeListener( 
     {
        if (!inTrigger)
        {
            inTrigger= true;
            field2.setValue('Updated by field1');
            inTrigger= false;
        }
     });
field2.addValueChangeListener( 
     {
        if (!inTrigger)
        {
            inTrigger= true;
            field1.setValue('Updated by field2');
            inTrigger= false;
        }
     });

这样您就可以防止更新循环并让您的代码只执行一次。