Можно ли в Wicket вкладывать формы, которые не зависят друг от друга? Я хочу иметь форму с кнопкой отправки и кнопкой отмены. Обе кнопки должны направлять пользователя на одну и ту же страницу (назовем это Foo). Кнопка отправки должна сначала отправить некоторую информацию на сервер; кнопка отмены ничего не должна делать.
Вот действительно упрощенная версия моего существующего кода:
Form form = new Form() {
public void onSubmit()
{
PageParameters params = new PageParameters();
params.put("DocumentID", docID);
setResponsePage(Foo.class, params);
}
};
DropDownChoice<String> ddc = new DropDownChoice<String>("name", new PropertyModel<String>(this, "nameSelection"), names);
ddc.setRequired(true);
final Button submitButton = new Button("Submit") {
public void onSubmit() { doSubmitStuff(true); }
};
final Button cancelButton = new Button("Cancel") {
public void onSubmit() { doSubmitStuff(false); }
};
form.add(ddc);
form.add(submitButton);
form.add(cancelButton);
form.add(new FeedbackPanel("validationMessages"));
Проблема в том, что я просто добавил валидатор, и он срабатывает, даже если я нажимаю кнопку отмены, поскольку кнопка отмены прикреплена к той же форме, что и все остальное. Этого можно было бы избежать, если бы кнопка отмены была в отдельной форме. Насколько я знаю, я не могу создать отдельную форму, потому что - из-за структуры HTML - отдельная форма будет находиться под существующей формой в иерархии компонентов.
Можно ли как-то разделить формы, несмотря на иерархию? Или есть какое-то другое решение, которое я могу использовать?
EDIT:
В ответ на комментарий Дона Роби, это немного ближе к тому, как выглядел мой код, когда я пытался setDefaultFormProcessing()
:
Form<Object> theForm = new Form<Object>("theForm") {
public void onSubmit()
{
PageParameters params = new PageParameters();
params.put("DocumentID", docID);
setResponsePage(Foo.class, params);
}
};
final CheckBox checkbox = new CheckBox("checkbox", new PropertyModel<Boolean>(this, "something"));
checkbox.add(new PermissionsValidator());
theForm.add(checkbox);
final Button saveButton = new Button("Save") {
public void onSubmit()
{ someMethod(true); }
};
final Button cancelButton = new Button("Cancel") {
public void onSubmit()
{ someMethod(false); }
};
cancelButton.setDefaultFormProcessing(false);
theForm.add(saveButton);
theForm.add(cancelButton);
theForm.add(new FeedbackPanel("validationMessages"));