I have a form with an inputfield, a label and an ajax button. I want to change the value of the label based on the ajax request AND i want the textfield to remember entered value via browser autocomplete. The basic structure is based on browser native autocomplete for dynamically generated forms (handled with ajax)
I reached both goals and the form works fine, both when submitting by Enter and by Button. I can even change the textfield value and submit again.
Only if I submit the Form a second time without changing the textfield value, I get a org.apache.wicket.core.request.mapper.StalePageException. It does not matter whether the first or the second submit happened through Enter or Button. Any combination leads to a stale renderCount as long as the textfield value is not changed. And 'not changed' includes reentering the same value again. That leads to the Exception, too.
I am not quite sure how entering a new value in a textfield changes the way wicket processes the page. Any help welcome, please.
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);
}
}