在触发事件“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,直到我提交表单,但为什么?请帮忙
答案 0 :(得分:5)
您需要AjaxFormComponentUpdatingBehavior
。但是,由于您的行为附加到onkeyup事件,您可能还想使用throttling。
答案 1 :(得分:1)
因为表单处理(以及随后将值写入模型)将仅在您提交时执行,而不是在您的某些组件的任何ajax回调中完成。
我认为,您可以尝试从文本字段中获取原始值:
String currentValue = titleTextField.getRawInput();