使用事件“onkeyup”获取输入数据

时间:2012-02-24 16:46:23

标签: java wicket

在触发事件“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 个答案:

答案 0 :(得分:5)

您需要AjaxFormComponentUpdatingBehavior。但是,由于您的行为附加到onkeyup事件,您可能还想使用throttling

答案 1 :(得分:1)

因为表单处理(以及随后将值写入模型)将仅在您提交时执行,而不是在您的某些组件的任何ajax回调中完成。

我认为,您可以尝试从文本字段中获取原始值:

String currentValue = titleTextField.getRawInput();