2014-07-23 55 views
1

我是vaadin的新成員,現在我遇到了以下問題。我有一個包含幾個選項卡的TabSheet。現在enter image description here禁用ValueChangeListener

稅法組件在即時模式下和別人設置好的它具有以下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並且我不想要這種情況時,也會發生這種情況?

我該如何解決這個問題?

+0

會發生什麼,當你切換標籤?你是否保存文本域的值並重新恢復?如果是這樣,請在添加valuechange偵聽器之前執行此操作。 – d2k2

+0

我的目標只是爲了避免ValueChangeListener當用戶chenge taxCode的值,然後切換到tab1 – Skizzo

+0

我想知道爲什麼valuechangelistener是由標籤更改觸發的。也許你可以發佈更多的代碼? – d2k2

回答

0

僅當實際更改TextField中的值時,此簡單測試應用程序在切換製表符時纔會觸發ValueChangeEvent。你有更多可能影響行爲的東西?

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

} 

}

相關問題