Excerpt | ||
---|---|---|
| ||
How to use multiple submit buttons in forms |
When we have a form with only one submit button, the default Form's onSubmit() method will be called. If the Form has more than one submit button, then the mechanism works differently.
Info |
---|
It might be a good idea to use |
To have more than one submit buttons in a Form, we need to create custom Button by subclassing from wicket.markup.html.form.Button. We define the custom Button behaviour by overiding the onSubmit() method and add the buttons to the Form. When the user click on any of the buttons, the specific behaviour of the button is executed by calling the button's onSubmit() method followed by execution of form's onSubmit() method.
Example:
We have a simple Form that contains two submit buttons. The class contructor looks something like this:
Code Block |
---|
public CustomForm(String form) { add(new OkayButton()); Button cancel = new CancelButton(); cancel.setDefaultFormProcessing(false); add(cancel); } |
Note: without setDefaultFormProcessing(false), the "cancel" button is subject to validation like the "Ok" button.
The we have two custom Button classes with the override onSubmit() that looks something like below:
Code Block |
---|
//This method is in OkayButton class public void onSubmit() { //what to do when this "Ok" button is click log.info("Ok button pressed"); } //This method is in CancelButton class public void onSubmit() { //Do the "Cancel" thing when click log.info("Cancel button pressed"); } |
Alternatively, this can also be done with anonymous inner classes, e.g.
Code Block |
---|
private static class MyForm extends Form { public MyForm(String name) { super(name); add(new Button("okbutton"){ public void onSubmit() { info("OK was pressed!"); } }); Button cancel = new Button("cancelbutton"){ public void onSubmit() { info("Cancel was pressed!"); } }; cancel.setDefaultFormProcessing(false); add(cancel); } } |
with the HTML being
Code Block | ||||
---|---|---|---|---|
| ||||
<form ...> <input type="submit" wicket:id="okbutton" value="OK" /> <input type="submit" wicket:id="cancelbutton" value="Cancel" /> </form> |
Alternatively, you could use the form's onSubmit() method for the submit triggered by the OK button, and the Cancel button's onSubmit() method for the submit triggered by the Cancel button.
Code Block |
---|
private static class MyForm extends Form { public MyForm(String name) { super(name); add(new Button("okbutton")); Button cancel = new Button("cancelbutton"){ public void onSubmit() { info("Cancel was pressed!"); } }; cancel.setDefaultFormProcessing(false); add(cancel); } protected void onSubmit() { info("OK was pressed!"); } } |