WICKET-4575 before/after submit
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/e0286bad Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/e0286bad Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/e0286bad Branch: refs/heads/wicket-1.5.x Commit: e0286bada4ba7142e039f3176210e86bd9c78544 Parents: d274f68 Author: Carl-Eric Menzel <[email protected]> Authored: Fri Jun 22 14:31:03 2012 +0200 Committer: Carl-Eric Menzel <[email protected]> Committed: Fri Jun 22 14:31:03 2012 +0200 ---------------------------------------------------------------------- .../wicket/ajax/form/AjaxFormSubmitBehavior.java | 44 ++++++++- .../wicket/ajax/markup/html/form/AjaxButton.java | 51 ++++++++++- .../ajax/markup/html/form/AjaxFallbackButton.java | 72 ++++++++++++++- .../ajax/markup/html/form/AjaxSubmitLink.java | 60 +++++++++++- .../markup/html/form/AbstractSubmitLink.java | 7 +- .../org/apache/wicket/markup/html/form/Button.java | 34 ++++++- .../org/apache/wicket/markup/html/form/Form.java | 15 +++- .../html/form/IBeforeAndAfterFormSubmitter.java | 38 ++++++++ .../wicket/markup/html/form/IFormSubmitter.java | 9 ++- .../apache/wicket/markup/html/form/SubmitLink.java | 21 ++++- .../html/form/FormSubmitOrderTest$TestPage.html | 7 ++ .../markup/html/form/FormSubmitOrderTest.java | 67 ++++++++++++++ .../markup/html/form/submitlink/HomePage.java | 44 ++++++++- .../markup/html/form/submitlink/TestHomePage.java | 13 +++ 14 files changed, 452 insertions(+), 30 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/e0286bad/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehavior.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehavior.java b/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehavior.java index 6532843..27d988e 100644 --- a/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehavior.java +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehavior.java @@ -21,7 +21,7 @@ import org.apache.wicket.ajax.AjaxEventBehavior; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.markup.html.form.Button; import org.apache.wicket.markup.html.form.Form; -import org.apache.wicket.markup.html.form.IFormSubmitter; +import org.apache.wicket.markup.html.form.IBeforeAndAfterFormSubmitter; import org.apache.wicket.markup.html.form.IFormSubmittingComponent; import org.apache.wicket.util.string.AppendingStringBuffer; @@ -155,7 +155,7 @@ public abstract class AjaxFormSubmitBehavior extends AjaxEventBehavior @Override protected void onEvent(final AjaxRequestTarget target) { - getForm().getRootForm().onFormSubmitted(new IFormSubmitter() + getForm().getRootForm().onFormSubmitted(new IBeforeAndAfterFormSubmitter() { public Form<?> getForm() { @@ -176,23 +176,57 @@ public abstract class AjaxFormSubmitBehavior extends AjaxEventBehavior { AjaxFormSubmitBehavior.this.onError(target); } + + public void onSubmitBeforeForm() + { + AjaxFormSubmitBehavior.this.onSubmitBeforeForm(target); + } + + public void onSubmitAfterForm() + { + AjaxFormSubmitBehavior.this.onSubmitAfterForm(target); + } }); } /** + * Override this method to provide special submit handling in a multi-button form. This method + * will be called <em>after</em> the form's onSubmit method. + */ + protected void onSubmitAfterForm(AjaxRequestTarget target) + { + } + + /** + * Override this method to provide special submit handling in a multi-button form. This method + * will be called <em>before</em> the form's onSubmit method. + */ + protected void onSubmitBeforeForm(AjaxRequestTarget target) + { + } + + /** * Listener method that is invoked after the form has been submitted and processed without * errors * * @param target + * @deprecated Will be removed in 6.0. Use {@link #onSubmitBeforeForm(AjaxRequestTarget)} and/or + * link #onSubmitAfterForm(AjaxRequestTarget)} instead. */ - protected abstract void onSubmit(AjaxRequestTarget target); + @Deprecated + protected void onSubmit(AjaxRequestTarget target) + { + } /** - * Listener method invoked when the form has been processed and errors occurred + * Listener method invoked when the form has been processed and errors occurred. This method is + * called <em>before</em> {@link Form#onError()}. * * @param target */ - protected abstract void onError(AjaxRequestTarget target); + protected void onError(AjaxRequestTarget target) + { + } /** * @see org.apache.wicket.ajax.AbstractDefaultAjaxBehavior#getPreconditionScript() http://git-wip-us.apache.org/repos/asf/wicket/blob/e0286bad/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxButton.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxButton.java b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxButton.java index c113db1..dcffebb 100644 --- a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxButton.java +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxButton.java @@ -23,6 +23,7 @@ import org.apache.wicket.ajax.IAjaxCallDecorator; import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior; import org.apache.wicket.markup.html.form.Button; import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.form.IFormSubmitter; import org.apache.wicket.model.IModel; import org.apache.wicket.util.string.AppendingStringBuffer; import org.apache.wicket.util.string.Strings; @@ -105,6 +106,26 @@ public abstract class AjaxButton extends Button /** * + * @see org.apache.wicket.ajax.form.AjaxFormSubmitBehavior#onSubmit(org.apache.wicket.ajax.AjaxRequestTarget) + */ + @Override + protected void onSubmitBeforeForm(AjaxRequestTarget target) + { + AjaxButton.this.onSubmitBeforeForm(target, AjaxButton.this.getForm()); + } + + /** + * + * @see org.apache.wicket.ajax.form.AjaxFormSubmitBehavior#onSubmit(org.apache.wicket.ajax.AjaxRequestTarget) + */ + @Override + protected void onSubmitAfterForm(AjaxRequestTarget target) + { + AjaxButton.this.onSubmitAfterForm(target, AjaxButton.this.getForm()); + } + + /** + * * @see org.apache.wicket.ajax.form.AjaxFormSubmitBehavior#onError(org.apache.wicket.ajax.AjaxRequestTarget) */ @Override @@ -203,8 +224,32 @@ public abstract class AjaxButton extends Button * * @param target * @param form + * @deprecated see {@link IFormSubmitter#onSubmit()} + */ + @Deprecated + protected void onSubmit(AjaxRequestTarget target, Form<?> form) + { + } + + /** + * Listener method invoked on form submit with no errors + * + * @param target + * @param form */ - protected abstract void onSubmit(AjaxRequestTarget target, Form<?> form); + protected void onSubmitBeforeForm(AjaxRequestTarget target, Form<?> form) + { + } + + /** + * Listener method invoked on form submit with no errors + * + * @param target + * @param form + */ + protected void onSubmitAfterForm(AjaxRequestTarget target, Form<?> form) + { + } /** * Listener method invoked on form submit with errors @@ -212,5 +257,7 @@ public abstract class AjaxButton extends Button * @param target * @param form */ - protected abstract void onError(AjaxRequestTarget target, Form<?> form); + protected void onError(AjaxRequestTarget target, Form<?> form) + { + } } http://git-wip-us.apache.org/repos/asf/wicket/blob/e0286bad/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxFallbackButton.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxFallbackButton.java b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxFallbackButton.java index 4a54fb8..e945f9a 100644 --- a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxFallbackButton.java +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxFallbackButton.java @@ -23,6 +23,7 @@ import org.apache.wicket.ajax.IAjaxCallDecorator; import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior; import org.apache.wicket.markup.html.form.Button; import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.form.IFormSubmitter; import org.apache.wicket.model.IModel; import org.apache.wicket.util.string.AppendingStringBuffer; @@ -77,6 +78,19 @@ public abstract class AjaxFallbackButton extends Button } @Override + protected void onSubmitBeforeForm(AjaxRequestTarget target) + { + AjaxFallbackButton.this.onSubmitBeforeForm(target, + AjaxFallbackButton.this.getForm()); + } + + @Override + protected void onSubmitAfterForm(AjaxRequestTarget target) + { + AjaxFallbackButton.this.onSubmitAfterForm(target, AjaxFallbackButton.this.getForm()); + } + + @Override protected void onError(AjaxRequestTarget target) { AjaxFallbackButton.this.onError(target, AjaxFallbackButton.this.getForm()); @@ -114,7 +128,9 @@ public abstract class AjaxFallbackButton extends Button * @param target * @param form */ - protected abstract void onError(AjaxRequestTarget target, Form<?> form); + protected void onError(AjaxRequestTarget target, Form<?> form) + { + } /** * @see org.apache.wicket.markup.html.form.IFormSubmittingComponent#onSubmit() @@ -129,6 +145,30 @@ public abstract class AjaxFallbackButton extends Button } /** + * @see org.apache.wicket.markup.html.form.IFormSubmittingComponent#onSubmit() + */ + @Override + public final void onSubmitBeforeForm() + { + if (AjaxRequestTarget.get() == null) + { + onSubmitBeforeForm(null, getForm()); + } + } + + /** + * @see org.apache.wicket.markup.html.form.IFormSubmittingComponent#onSubmit() + */ + @Override + public final void onSubmitAfterForm() + { + if (AjaxRequestTarget.get() == null) + { + onSubmitAfterForm(null, getForm()); + } + } + + /** * * @see org.apache.wicket.markup.html.form.Button#getForm() */ @@ -145,8 +185,36 @@ public abstract class AjaxFallbackButton extends Button * @param target * ajax target if this linked was invoked using ajax, null otherwise * @param form + * @deprecated see {@link IFormSubmitter#onSubmit()} + */ + @Deprecated + protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) + { + } + + /** + * Callback for the onClick event. If ajax failed and this event was generated via a normal + * submission, the target argument will be null + * + * @param target + * ajax target if this linked was invoked using ajax, null otherwise + * @param form */ - protected abstract void onSubmit(final AjaxRequestTarget target, final Form<?> form); + protected void onSubmitBeforeForm(final AjaxRequestTarget target, final Form<?> form) + { + } + + /** + * Callback for the onClick event. If ajax failed and this event was generated via a normal + * submission, the target argument will be null + * + * @param target + * ajax target if this linked was invoked using ajax, null otherwise + * @param form + */ + protected void onSubmitAfterForm(final AjaxRequestTarget target, final Form<?> form) + { + } /** * http://git-wip-us.apache.org/repos/asf/wicket/blob/e0286bad/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxSubmitLink.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxSubmitLink.java b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxSubmitLink.java index 89993b1..2176b43 100644 --- a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxSubmitLink.java +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxSubmitLink.java @@ -22,6 +22,7 @@ import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior; import org.apache.wicket.markup.ComponentTag; import org.apache.wicket.markup.html.form.AbstractSubmitLink; import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.form.IFormSubmitter; import org.apache.wicket.util.string.AppendingStringBuffer; /** @@ -107,11 +108,39 @@ public abstract class AjaxSubmitLink extends AbstractSubmitLink { return AjaxSubmitLink.this.getDefaultFormProcessing(); } + + @Override + protected void onSubmitAfterForm(AjaxRequestTarget target) + { + AjaxSubmitLink.this.onSubmitAfterForm(target, getForm()); + } + + @Override + protected void onSubmitBeforeForm(AjaxRequestTarget target) + { + AjaxSubmitLink.this.onSubmitBeforeForm(target, getForm()); + } }); } /** + * Override this method to provide special submit handling in a multi-button form. This method + * will be called <em>before</em> the form's onSubmit method. + */ + protected void onSubmitBeforeForm(AjaxRequestTarget target, Form<?> form) + { + } + + /** + * Override this method to provide special submit handling in a multi-button form. This method + * will be called <em>after</em> the form's onSubmit method. + */ + protected void onSubmitAfterForm(AjaxRequestTarget target, Form<?> form) + { + } + + /** * Returns the {@link IAjaxCallDecorator} that will be used to modify the generated javascript. * This is the preferred way of changing the javascript in the onclick handler * @@ -162,19 +191,42 @@ public abstract class AjaxSubmitLink extends AbstractSubmitLink } /** + * Use {@link #onSubmitAfterForm(AjaxRequestTarget, Form)} instead. + */ + public final void onSubmitAfterForm() + { + } + + /** + * Use {@link #onSubmitBeforeForm(AjaxRequestTarget, Form)} instead. + */ + public final void onSubmitBeforeForm() + { + } + + /** * Listener method invoked on form submit * * @param target * @param form + * @deprecated This method will be removed in 6.0. Use + * {@link #onSubmitBeforeForm(AjaxRequestTarget, Form)} and/or + * {@link #onSubmitAfterForm(AjaxRequestTarget, Form)} instead. See + * {@link IFormSubmitter#onSubmit()}. */ - protected abstract void onSubmit(AjaxRequestTarget target, Form<?> form); + @Deprecated + protected void onSubmit(AjaxRequestTarget target, Form<?> form) + { + } /** - * Listener method invoked on form submit with errors + * Listener method invoked on form submit with errors. This method is called <em>before</em> + * {@link Form#onError()}. * * @param target * @param form */ - protected abstract void onError(AjaxRequestTarget target, Form<?> form); - + protected void onError(AjaxRequestTarget target, Form<?> form) + { + } } http://git-wip-us.apache.org/repos/asf/wicket/blob/e0286bad/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AbstractSubmitLink.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AbstractSubmitLink.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AbstractSubmitLink.java index e13070c..c25c49f 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AbstractSubmitLink.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AbstractSubmitLink.java @@ -25,10 +25,13 @@ import org.apache.wicket.model.IModel; * @author Matej Knopp * */ -public abstract class AbstractSubmitLink extends AbstractLink implements IFormSubmittingComponent +public abstract class AbstractSubmitLink extends AbstractLink + implements + IFormSubmittingComponent, + IBeforeAndAfterFormSubmitter { /** - * + * */ private static final long serialVersionUID = 1L; http://git-wip-us.apache.org/repos/asf/wicket/blob/e0286bad/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Button.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Button.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Button.java index 7419563..0b01935 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Button.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Button.java @@ -48,7 +48,11 @@ import org.apache.wicket.model.IModel; * @author Eelco Hillenius * */ -public class Button extends FormComponent<String> implements IFormSubmittingComponent +public class Button extends FormComponent<String> + implements + IFormSubmitter, + IFormSubmittingComponent, + IBeforeAndAfterFormSubmitter { private static final long serialVersionUID = 1L; @@ -104,7 +108,7 @@ public class Button extends FormComponent<String> implements IFormSubmittingComp /** * Override to not throw exception if there is no parent form. - * + * * @return the parent form or {@code null} */ @Override @@ -212,8 +216,13 @@ public class Button extends FormComponent<String> implements IFormSubmittingComp /** * Override this method to provide special submit handling in a multi-button form. It is called - * whenever the user clicks this particular button, except if validation fails. + * whenever the user clicks this particular button, except if validation fails. This method will + * be called <em>before</em> {@link Form#onSubmit()}. + * + * @deprecated This method will be removed in 6.0. Use {@link #onSubmitBeforeForm()} and/or + * {@link #onSubmitAfterForm()} instead. See {@link IFormSubmitter#onSubmit()}. */ + @Deprecated public void onSubmit() { } @@ -223,6 +232,23 @@ public class Button extends FormComponent<String> implements IFormSubmittingComp */ public void onError() { + } + /** + * Override this method to provide special submit handling in a multi-button form. It is called + * whenever the user clicks this particular button, except if validation fails. This method will + * be called <em>before</em> {@link Form#onSubmit()}. + */ + public void onSubmitBeforeForm() + { + } + + /** + * Override this method to provide special submit handling in a multi-button form. It is called + * whenever the user clicks this particular button, except if validation fails. This method will + * be called <em>after</em> {@link Form#onSubmit()}. + */ + public void onSubmitAfterForm() + { } -} \ No newline at end of file +} http://git-wip-us.apache.org/repos/asf/wicket/blob/e0286bad/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Form.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Form.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Form.java index 8ad2571..c74fff7 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Form.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Form.java @@ -1217,7 +1217,11 @@ public class Form<T> extends WebMarkupContainer implements IFormSubmitListener if (submittingComponent != null) { // invoke submit on component - submittingComponent.onSubmit(); + if (submittingComponent instanceof IBeforeAndAfterFormSubmitter) + { + ((IBeforeAndAfterFormSubmitter)submittingComponent).onSubmitBeforeForm(); + } + submittingComponent.onSubmit(); // remove this for 6.0 } // invoke Form#onSubmit(..) going from innermost to outermost @@ -1232,6 +1236,15 @@ public class Form<T> extends WebMarkupContainer implements IFormSubmitListener } } }, new ClassVisitFilter(Form.class)); + + + if (submittingComponent != null) + { + if (submittingComponent instanceof IBeforeAndAfterFormSubmitter) + { + ((IBeforeAndAfterFormSubmitter)submittingComponent).onSubmitAfterForm(); + } + } } /** http://git-wip-us.apache.org/repos/asf/wicket/blob/e0286bad/wicket-core/src/main/java/org/apache/wicket/markup/html/form/IBeforeAndAfterFormSubmitter.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/IBeforeAndAfterFormSubmitter.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/IBeforeAndAfterFormSubmitter.java new file mode 100644 index 0000000..0c49c74 --- /dev/null +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/IBeforeAndAfterFormSubmitter.java @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.wicket.markup.html.form; + +/** + * Temporary interface to provide new methods for 1.5. Will be removed in 6.0, where these methods + * are in IFormSubmitter. + * + * @author Carl-Eric Menzel + */ +public interface IBeforeAndAfterFormSubmitter extends IFormSubmitter +{ + /** + * Override this method to provide special submit handling in a multi-button form. This method + * will be called <em>before</em> the form's onSubmit method. + */ + void onSubmitBeforeForm(); + + /** + * Override this method to provide special submit handling in a multi-button form. This method + * will be called <em>after</em> the form's onSubmit method. + */ + void onSubmitAfterForm(); +} http://git-wip-us.apache.org/repos/asf/wicket/blob/e0286bad/wicket-core/src/main/java/org/apache/wicket/markup/html/form/IFormSubmitter.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/IFormSubmitter.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/IFormSubmitter.java index aad0487..6460b01 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/IFormSubmitter.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/IFormSubmitter.java @@ -43,13 +43,18 @@ public interface IFormSubmitter /** * Override this method to provide special submit handling in a multi-button form. It is called - * whenever the user clicks this particular button. + * whenever the user clicks this particular button, <em>before</em> {@link Form#onSubmit()}. + * + * @deprecated Use {@link IBeforeAndAfterFormSubmitter#onSubmitAfterForm()} and/or + * {@link IBeforeAndAfterFormSubmitter#onSubmitBeforeForm()} instead. This method + * will be removed in 6.0. */ + @Deprecated void onSubmit(); /** * Method that is invoked when form processing fails; for example, when there are validation - * errors. + * errors. This method will be called <em>before</em> {@link Form#onError()}. */ void onError(); } http://git-wip-us.apache.org/repos/asf/wicket/blob/e0286bad/wicket-core/src/main/java/org/apache/wicket/markup/html/form/SubmitLink.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/SubmitLink.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/SubmitLink.java index 6be64fe..db69f28 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/SubmitLink.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/SubmitLink.java @@ -45,7 +45,7 @@ import org.apache.wicket.model.IModel; * + mod.getValue1()); * }; * }); - * + * * <form wicket:id="linkForm" > * <input wicket:id="value1" type="text" size="30"/> * <a wicket:id="link1">Press link1 to submit</a> @@ -225,8 +225,10 @@ public class SubmitLink extends AbstractSubmitLink } /** + * @deprecated * @see org.apache.wicket.markup.html.form.IFormSubmittingComponent#onSubmit() */ + @Deprecated public void onSubmit() { } @@ -238,4 +240,19 @@ public class SubmitLink extends AbstractSubmitLink { } -} \ No newline at end of file + /** + * Override this method to provide special submit handling in a multi-button form. This method + * will be called <em>after</em> the form's onSubmit method. + */ + public void onSubmitAfterForm() + { + } + + /** + * Override this method to provide special submit handling in a multi-button form. This method + * will be called <em>before</em> the form's onSubmit method. + */ + public void onSubmitBeforeForm() + { + } +} http://git-wip-us.apache.org/repos/asf/wicket/blob/e0286bad/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormSubmitOrderTest$TestPage.html ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormSubmitOrderTest$TestPage.html b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormSubmitOrderTest$TestPage.html new file mode 100644 index 0000000..518b266 --- /dev/null +++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormSubmitOrderTest$TestPage.html @@ -0,0 +1,7 @@ +<html> +<body> +<form wicket:id="form"> +<input type="submit" wicket:id="button"/> +</form> +</body> +</html> http://git-wip-us.apache.org/repos/asf/wicket/blob/e0286bad/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormSubmitOrderTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormSubmitOrderTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormSubmitOrderTest.java new file mode 100644 index 0000000..23fd812 --- /dev/null +++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormSubmitOrderTest.java @@ -0,0 +1,67 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.wicket.markup.html.form; + +import org.apache.wicket.WicketTestCase; +import org.apache.wicket.markup.html.WebPage; +import org.junit.Test; + +public class FormSubmitOrderTest extends WicketTestCase +{ + public static class TestPage extends WebPage + { + String result = ""; + + public TestPage() + { + Form form = new Form("form") + { + @Override + protected void onSubmit() + { + super.onSubmit(); + result += "form"; + } + }; + this.add(form); + form.add(new Button("button") + { + @Override + public void onSubmitBeforeForm() + { + super.onSubmit(); + result += "before"; + } + + @Override + public void onSubmitAfterForm() + { + super.onSubmit(); + result += "after"; + } + }); + } + } + + @Test + public void submitOrder() throws Exception + { + TestPage page = tester.startPage(TestPage.class); + tester.newFormTester("form").submit("button"); + assertEquals("beforeformafter", page.result); + } +} http://git-wip-us.apache.org/repos/asf/wicket/blob/e0286bad/wicket-core/src/test/java/org/apache/wicket/markup/html/form/submitlink/HomePage.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/submitlink/HomePage.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/submitlink/HomePage.java index 406b3a9..9f8c4ed 100644 --- a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/submitlink/HomePage.java +++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/submitlink/HomePage.java @@ -16,6 +16,8 @@ */ package org.apache.wicket.markup.html.form.submitlink; +import static junit.framework.Assert.*; + import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.SubmitLink; @@ -27,10 +29,12 @@ import org.apache.wicket.model.PropertyModel; public class HomePage extends WebPage { boolean submitted = false; - boolean submittedViaLink = false; + boolean submittedViaLinkDeprecated = false; + boolean submittedViaLinkBefore = false; + boolean submittedViaLinkAfter = false; String text; /** - * + * */ private static final long serialVersionUID = 1L; @@ -43,7 +47,7 @@ public class HomePage extends WebPage Form<Void> form = new Form<Void>("form") { /** - * + * */ private static final long serialVersionUID = 1L; @@ -58,14 +62,32 @@ public class HomePage extends WebPage { /** - * + * */ private static final long serialVersionUID = 1L; @Override + public void onSubmitBeforeForm() + { + submittedViaLinkBefore = true; + assertFalse("before must be the first!", submittedViaLinkAfter); + assertFalse("before must be the first!", submittedViaLinkDeprecated); + } + + @Override public void onSubmit() { - submittedViaLink = true; + assertTrue("before must have been called!", submittedViaLinkBefore); + submittedViaLinkDeprecated = true; + assertFalse("after must not yet have been called", submittedViaLinkAfter); + } + + @Override + public void onSubmitAfterForm() + { + assertTrue("before must have been called!", submittedViaLinkBefore); + assertTrue("onsubmit must have been called!", submittedViaLinkDeprecated); + submittedViaLinkAfter = true; } }); @@ -102,6 +124,16 @@ public class HomePage extends WebPage */ public boolean isSubmittedViaLink() { - return submittedViaLink; + return submittedViaLinkDeprecated; + } + + boolean isSubmittedViaLinkBefore() + { + return submittedViaLinkBefore; + } + + boolean isSubmittedViaLinkAfter() + { + return submittedViaLinkAfter; } } http://git-wip-us.apache.org/repos/asf/wicket/blob/e0286bad/wicket-core/src/test/java/org/apache/wicket/markup/html/form/submitlink/TestHomePage.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/submitlink/TestHomePage.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/submitlink/TestHomePage.java index 9a2308c..c2b5639 100644 --- a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/submitlink/TestHomePage.java +++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/submitlink/TestHomePage.java @@ -36,6 +36,11 @@ public class TestHomePage extends WicketTestCase assertEquals("Hello", home.getText()); assertTrue("Form.onSubmit() has not been called!", home.isSubmitted()); assertTrue("SubmitLink.onSubmit() has not been called!", home.isSubmittedViaLink()); + assertTrue("SubmitLink.onSubmitBeforeForm() has not been called!", + home.isSubmittedViaLinkBefore()); + assertTrue("SubmitLink.onSubmitAfterForm() has not been called!", + home.isSubmittedViaLinkAfter()); + } /** @@ -53,6 +58,10 @@ public class TestHomePage extends WicketTestCase assertEquals("Hello", home.getText()); assertTrue("Form.onSubmit() has not been called!", home.isSubmitted()); assertTrue("SubmitLink.onSubmit() has not been called!", home.isSubmittedViaLink()); + assertTrue("SubmitLink.onSubmitBeforeForm() has not been called!", + home.isSubmittedViaLinkBefore()); + assertTrue("SubmitLink.onSubmitAfterForm() has not been called!", + home.isSubmittedViaLinkAfter()); } /** @@ -69,6 +78,10 @@ public class TestHomePage extends WicketTestCase assertEquals("Hello", home.getText()); assertTrue("Form.onSubmit() has not been called!", home.isSubmitted()); assertTrue("SubmitLink.onSubmit() has not been called!", home.isSubmittedViaLink()); + assertTrue("SubmitLink.onSubmitBeforeForm() has not been called!", + home.isSubmittedViaLinkBefore()); + assertTrue("SubmitLink.onSubmitAfterForm() has not been called!", + home.isSubmittedViaLinkAfter()); } }
