禁用ValueChangeListener

时间:2014-07-23 15:57:38

标签: vaadin vaadin7

我是vaadin的新手,现在我遇到了以下麻烦。我有一个包含几个标签的TabSheet。enter image description here

现在我的税码组件以立即模式设置,而其他组件则具有以下ValueChangeLister

    TextField taxCode = new TextField();
    taxCode.setImmediate(true);
    taxCode.addValueChangeListener(new ValueChangeListener() {

            @Override
            public void valueChange(ValueChangeEvent event) {

                if(taxCode.isModified()){
                    searchByTaxCode(taxCode.getValue());
                }               
            }
        });

然后,每次用户将值更改为taxCode组件时,都会调用 searchByTaxCode 方法。当用户从Tab2切换到Tab1并且我不想要这个时,会发生这种情况吗?

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

这个简单的测试应用程序在切换选项卡时不会触发ValueChangeEvent,只有在实际更改TextField中的值时才会触发。你还有更多可能影响行为的事情吗?

public class TabSheetEventsUI extends UI {

@WebServlet(value = "/tabsheetevents/*", asyncSupported = true)
@VaadinServletConfiguration(productionMode = false, ui = TabSheetEventsUI.class)
public static class Servlet extends VaadinServlet {
}

@Override
protected void init(VaadinRequest request) {

    TabSheet tabSheet = new TabSheet();

    Panel tab1 = new Panel("Tab 1");
    Panel tab2 = new Panel("Tab 2");
    tabSheet.addTab(tab1);
    tabSheet.addTab(tab2);

    final TextField tab1tf = new TextField("tab1tf");
    tab1tf.setImmediate(true);
    tab1tf.addValueChangeListener(new ValueChangeListener() {

        @Override
        public void valueChange(ValueChangeEvent event) {
            System.out.println("Value change event catched.");
        }
    });

    tab1.setContent(tab1tf);
    setContent(tabSheet);

}

}

相关问题