получение входных данных с событием "onkeyup" - PullRequest
2 голосов
/ 24 февраля 2012

У меня небольшая проблема с получением входных данных, когда на нем запускается событие "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 );
}

Фактический размер остается нулевым, пока я не отправлю форму, но почему?Любая помощь, пожалуйста

Ответы [ 2 ]

5 голосов
/ 24 февраля 2012

Вам нужно AjaxFormComponentUpdatingBehavior. Однако, поскольку ваше поведение привязано к событию onkeyup, вы также можете использовать throttling .

1 голос
/ 24 февраля 2012

Это потому, что обработка формы (и последующая запись значений в модель) будет выполняться только при ее отправке, а не при любом обратном вызове ajax от некоторых ваших компонентов.

Я думаю, вы можете попытаться получить необработанное значение из текстового поля:

String currentValue = titleTextField.getRawInput();
...