【问题标题】:Handling more complex forms处理更复杂的表格
【发布时间】:2015-05-26 13:55:01
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: forms vaadin


    【解决方案1】:

    在 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;
            }
         });
    

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

    【讨论】:

    • 我稍微扩展了这种方法,基本上将inTrigger的类更改为AbstractField,这样我就可以做输入源相关的逻辑了。
    猜你喜欢
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    相关资源
    最近更新 更多