1

我有一个表单,并且有一个 TextField。我在表单中添加了按钮,与默认提交不同。单击 TextField 旁边的按钮后,我想使用 Ajaxformcomponentupdatingbehavior 从 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());
             }
});

TextField 的值为null,第二次单击按钮后,我得到正确的值。单击按钮后如何获取 TextField 的值?

4

1 回答 1

1

AjaxFormComponentUpdatingBehavior不完全按照你的想法。该行为实际上应用于TextField,而不是按钮。您的代码正在更新按钮的模型而不是文本。有关示例,请参见上一个问题。

我之前已经为地址表单中的邮政编码查找按钮完成了此操作。我使用“IndicatingAjaxButton”来推送整个表单,并且禁用了默认表单处理。然后我直接抓取文本输入,将其推送到标准化格式的验证器中,然后进行处理:

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);
于 2013-07-22T09:35:24.490 回答