我有一个带有输入字段,标签和ajax按钮的表单。我想根据ajax请求更改标签的值,我希望textfield通过浏览器自动完成记住输入的值。基本结构基于browser native autocomplete for dynamically generated forms (handled with ajax)
我达到了两个目标并且表单工作正常,无论是通过Enter还是按钮提交。我甚至可以更改文本字段值并再次提交。
只有当我第二次提交表单而不更改文本字段值时,我才会得到org.apache.wicket.core.request.mapper.StalePageException
。第一次或第二次提交是通过Enter还是Button发生并不重要。只要文本字段值未更改,任何组合都会导致stale renderCount
。并没有改变'包括再次重新输入相同的值。这也导致了例外。
我不太确定如何在文本字段中输入新值会改变wicket处理页面的方式。欢迎任何帮助。
HTML:
<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"> <head> <wicket:head> <title>Suche </title> </wicket:head> </head> <body> <form target="the_iframe" wicket:id="w_form" id="myform" > <input wicket:id="w_input"/> <label wicket:id="w_label"> </label> <input wicket:id="w_button" type="submit" onclick="myform.submit();"/> </form> <iframe name="the_iframe" hidden="true"> </iframe> </body> </html>
Javacode:
public class TestseitePage extends WebPage {
private final Form w_form = new Form("w_form");
@Override
protected void onInitialize() {
super.onInitialize();
final TextField<String> w_input = new TextField<String>("w_input", new Model<String>(""));
final Model m = new Model<String>("Test");
final Label w_label = new Label("w_label", m);
w_label.setOutputMarkupId(true);
add(w_form);
w_form.add(w_label);
w_form.add(w_input);
final AjaxButton w_button = new AjaxButton("w_button") {
@Override
protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
try {
Thread.sleep(2000);
} catch (final InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
m.setObject("Button " + new Date().getTime());
target.add(w_label);
}
};
w_form.add(w_button);
}
}
答案 0 :(得分:1)
从按钮的标记中删除onclick="myform.submit();"
。在我看来,这将触发表单的非Ajax提交,这将导致整页重新呈现,从而更改Page#renderCount