处理更复杂的表格

时间:2015-05-26 13:55:02

标签: forms vaadin

在我目前的项目中,我必须处理更复杂的表格。如果特定字段(我将其命名为“C”)接收到用户输入,则字段(我将其命名为“A”和“B”)将自动填充。但是,如果用户将数据输入到字段A中,则字段B和C将自动填写。

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

我需要注意的是没有发生循环(C - > A - > C - > A - > ...)。所以我现在需要,如果当前值的变化是由于用户输入或另一个已接收输入的字段,然后触发了当前字段的值更改。而且我现在还需要在第二种情况下哪个字段确切地触发了值的变化,因为那时我必须触发与触发该值变化的人/什么相对应的其他特定操作。

  • Vaadin是否有一种处理这种形式的一般方法 结构体?目前的问题是我现在根本不知道是谁 或是什么触发了ValueChangeEvent。
  • 是否有框架可以解决这个问题,还是我忽略了现有的Vaadin模式?

1 个答案:

答案 0 :(得分:3)

处理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;
        }
     });

这样你就可以阻止更新循环,让你只执行一次代码。