Java wicket AjaxFormComponentUpdateingBehavior通过单击按钮获取TextField的值

Java wicket AjaxFormComponentUpdateingBehavior通过单击按钮获取TextField的值,java,forms,wicket,Java,Forms,Wicket,我有一个表单和一个文本字段。我将按钮添加到表单中,与默认提交不同。单击TextField旁边的按钮后,我想使用AjaxFormComponentUpdateingBehavior从TextField获取值 我的代码如下所示: private String string; ... public ..() { Form form = new Form("form") { @Override protected void onSubmit() {

我有一个表单和一个文本字段。我将按钮添加到表单中,与默认提交不同。单击TextField旁边的按钮后,我想使用AjaxFormComponentUpdateingBehavior从TextField获取值

我的代码如下所示:

private String string;
...
public ..() {   
Form form = new Form("form") {
            @Override
            protected void onSubmit() { 
         //some code
};

add(form);
TextField textField = new TextField("string", new PropertyModel<String>(this,"string"));
 textField.setOutputMarkupId(true);
form.add(textField);
Button button = new Button("evalButton");   
form.add(button);
button.add(new AjaxFormComponentUpdatingBehavior("onclick") {
            @Override
            protected void onUpdate(AjaxRequestTarget target) {               
                System.out.print(textField.getValue());
             }
});
私有字符串;
...
公共..{
表格=新表格(“表格”){
@凌驾
受保护的void onSubmit(){
//一些代码
};
添加(表格);
TextField TextField=newtextfield(“字符串”,newpropertyModel(“字符串”));
setOutputMarkupId(true);
form.add(textField);
按钮按钮=新按钮(“evalButton”);
表单添加(按钮);
添加(新的AjaxFormComponentUpdateBehavior(“onclick”){
@凌驾
受保护的void onUpdate(AjaxRequestTarget目标){
System.out.print(textField.getValue());
}
});

TextField的值为空,在第二次单击按钮后,我得到了正确的值。如何在单击一个按钮后获得TextField的值?

AjaxFormComponentUpdateBehavior
与您的想法完全不同。该行为实际上应用于
TextField
,而不是按钮。您r代码正在更新按钮的型号而不是文本。有关示例,请参阅

我以前对地址表单中的邮政编码查找按钮执行过此操作。我使用“IndicationGajaxButton”来推送整个表单,并禁用了默认表单处理。然后,我直接抓取文本输入,通过格式标准化的验证器推送,然后处理:

final IndicatingAjaxButton lookup = new IndicatingAjaxButton("lookup", form) {
  @Override
  protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
    String code = postcode.getInput();

    code = (new PostcodeValidator()).convertToObject(code,
                    getLocale());

    ... Postcode lookup here


    target.add(ContactDetailsPanel.this);
  }

  @Override
  protected void onError(AjaxRequestTarget target, Form<?> form) {
  }
};
lookup.setDefaultFormProcessing(false);
add(lookup);
final IndicatingAjaxButton lookup=新的IndicatingAjaxButton(“lookup”,表单){
@凌驾
提交时受保护的void(AjaxRequestTarget目标,表单){
字符串代码=postcode.getInput();
代码=(新的PostcodeValidator()).convertToObject(代码,
getLocale());
…在这里查找邮政编码
target.add(ContactDetailsPanel.this);
}
@凌驾
受保护的void onError(AjaxRequestTarget目标,表单){
}
};
lookup.setDefaultFormProcessing(false);
添加(查找);

AjaxFormComponentUpdateingBehavior
与您的想法不完全一样。该行为实际上应用于
文本字段,而不是按钮。您的代码正在更新按钮的型号,而不是文本。有关示例,请参阅

我以前对地址表单中的邮政编码查找按钮执行过此操作。我使用“IndicationGajaxButton”来推送整个表单,并禁用了默认表单处理。然后,我直接抓取文本输入,通过格式标准化的验证器推送,然后处理:

final IndicatingAjaxButton lookup = new IndicatingAjaxButton("lookup", form) {
  @Override
  protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
    String code = postcode.getInput();

    code = (new PostcodeValidator()).convertToObject(code,
                    getLocale());

    ... Postcode lookup here


    target.add(ContactDetailsPanel.this);
  }

  @Override
  protected void onError(AjaxRequestTarget target, Form<?> form) {
  }
};
lookup.setDefaultFormProcessing(false);
add(lookup);
final IndicatingAjaxButton lookup=新的IndicatingAjaxButton(“lookup”,表单){
@凌驾
提交时受保护的void(AjaxRequestTarget目标,表单){
字符串代码=postcode.getInput();
代码=(新的PostcodeValidator()).convertToObject(代码,
getLocale());
…在这里查找邮政编码
target.add(ContactDetailsPanel.this);
}
@凌驾
受保护的void onError(AjaxRequestTarget目标,表单){
}
};
lookup.setDefaultFormProcessing(false);
添加(查找);