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());
  *           };
  *      });
- *          
+ * 
  *      &lt;form wicket:id=&quot;linkForm&quot; &gt;
  *          &lt;input wicket:id=&quot;value1&quot; type=&quot;text&quot; 
size=&quot;30&quot;/&gt;
  *          &lt;a wicket:id=&quot;link1&quot;&gt;Press link1 to 
submit&lt;/a&gt;
@@ -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());
        }
 
 }

Reply via email to