2012-02-24 53 views
2

當觸發事件「onkeyup」時,獲取輸入數據時遇到小問題。我有這樣的投入和其他DATAS:獲取帶有事件「onkeyup」的輸入數據

// El-cheapo model for form 
private static final ValueMap cheapModel = new ValueMap(); 
//some code... 
//... 

Form form = new Form("pushNotificationForm"); 
form.setOutputMarkupId(true); 

final Label actualSizeLabel = new Label(ACTUAL_NOTIFICATION_SIZE_ID, new Model<String>(actualSize)); 
actualSizeLabel.setOutputMarkupId(true); 

final TextField<String> titleTextField = new TextField<String>(TITLE_TEXTFIELD_ID, new PropertyModel<String>(
      cheapModel, TITLE_TEXTFIELD_ID)); 
    titleTextField.setRequired(true); 
    titleTextField.add(new AjaxEventBehavior("onkeyup") 
    { 
     @Override 
     protected void onEvent(AjaxRequestTarget ajaxRequestTarget) 
     { 
      actualSize = Integer.toString((getTitle()).getBytes().length); 
      ajaxRequestTarget.add(actualSizeLabel); 
     } 
    }); 
form.add(titleTextField); 
form.add(actualSizeLabel); 
//.. some code 
//later 
private String getTitle() 
{ 
    return cheapModel.getString(TITLE_TEXTFIELD_ID); 
} 

的actualSize保持爲空,直到我提交表單,但是爲什麼呢?任何幫助請

+2

因爲您沒有提交數據。 – bert 2012-02-24 17:08:09

回答

5

你需要AjaxFormComponentUpdatingBehavior。但是,由於您的行爲已附加到onkeyup事件,因此您可能還想使用throttling

+0

這是解決方案:)你有什麼想法如何克服問題當需要TextField,當我鍵入東西到字段,然後刪除,我得到「必填字段」錯誤消息反饋面板? – kamil 2012-02-24 21:11:30

+0

最簡單的解決方案是將驗證移動到表單級驗證程序。這些僅在提交完整表單時運行,而不是在單個字段更新時運行。 – biziclop 2012-02-24 22:08:24

1

它是因爲表單處理(以及隨後將值寫入模型)只會在您提交時完成,而不是在某些組件的任何ajax回調中完成。

我想,你可以嘗試從文本字段獲取的原始值:

String currentValue = titleTextField.getRawInput(); 
+0

這是我的解決方案之一,它沒有工作要麼 – kamil 2012-02-24 20:58:21