2011-05-04 35 views
0

我創建了一個TextFieldTextChangeListener。當用戶鍵入某些值(在本例中爲'admin')時,則在該字段上調用addStyleName,並且字體顏色變爲紅色。但之後,該值爲空,並且每個輸入的字符都被清除。
這裏是應用程序的代碼。爲什麼在TextField增加新款式後其價值發生變化?Vaadin addStyleName問題

public class VaadintestApplication extends Application { 
@Override 
public void init() { 
    Window mainWindow = new Window("Vaadintest Application"); 

    setTheme("test"); 

    TextField textField = new TextField("username"); 
    textField.setEnabled(true); 

    textField.setTextChangeEventMode(TextChangeEventMode.EAGER); 
    textField.addListener(new TextChangeListener() { 
     public void textChange(TextChangeEvent event) { 
      if ("admin".equals(event.getText())) { 
       ((TextField) event.getComponent()).addStyleName("text-error"); 
      } else { 
       ((TextField) event.getComponent()).removeStyleName("text-error"); 
      } 
     } 
    }); 

    mainWindow.addComponent(textField); 
    setMainWindow(mainWindow); 
    } 
} 

回答

2

我猜想,會發生以下情況:

  • 樣式名稱變更觸發服務器上重新繪製,使TextField組件再次序列化到客戶端

  • 的客戶端接收序列化(整個血腥的事情,不僅僅是被更改的部分,因爲這是與Vaadin的工作方式),因此它會更改文本字段的內容,同時忽略文本更改偵聽器未處理的任何更改

解決方案:

  1. 更新的文本字段的添加/刪除樣式名稱相同時間值:((TextField) event.getComponent()).setValue(event.getText())

  2. 創建延伸VTextField定製的客戶端插件和在那裏添加功能