2012-02-24 10 views
2

"onkeyup"というイベントがトリガされている間、入力データの取得には少し問題があります。イベント "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は私がフォームを送信するが、なぜそれまでは、nullのまま:私はそのような入力やその他の件のデータがありますか?任意の助けてください

+2

データを送信しないためです。 – bert

答えて

5

あなたはAjaxFormComponentUpdatingBehaviorを必要としています。ただし、あなたの振る舞いはonkeyupイベントに関連付けられているので、throttlingを使用することもできます。

+0

それは解決策でした:TextFieldが必要なときにどのように問題を克服し、フィールドに何かを入力してから削除すると "required field"フィードバックパネル用? – kamil

+0

最も簡単な解決策は、検証をフォームレベルのバリデーターに移動することです。これらは、フルフォームが送信されたときにのみ実行されますが、単一のフィールドが更新されたときは実行されません。 – biziclop

1

その理由は、フォーム処理(およびその後のモデルへの値の書き込み)は、送信時にのみ行われ、一部のコンポーネントからのajaxコールバックでは行われないためです。

私は、あなたがテキストフィールドから生の値を取得しようとすることができると思う:

String currentValue = titleTextField.getRawInput(); 
+0

それは私の解決策の1つでした。それはどちらでも解決しませんでした – kamil

関連する問題