Updated Branches:
  refs/heads/master 89ec826fd -> 4c1de3267

WICKET-5076 call #onSubmit() on correct forms

Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/4c1de326
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/4c1de326
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/4c1de326

Branch: refs/heads/master
Commit: 4c1de3267485607b7731d5cb858fd6455fcc331e
Parents: 89ec826
Author: svenmeier <[email protected]>
Authored: Tue Mar 5 15:31:06 2013 +0100
Committer: svenmeier <[email protected]>
Committed: Tue Mar 5 15:31:06 2013 +0100

----------------------------------------------------------------------
 .../org/apache/wicket/markup/html/form/Form.java   |   31 ++++++++++-----
 1 files changed, 21 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/4c1de326/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 25f9136..a7f07f3 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
@@ -55,6 +55,7 @@ import org.apache.wicket.settings.IApplicationSettings;
 import org.apache.wicket.util.encoding.UrlDecoder;
 import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.lang.Bytes;
+import org.apache.wicket.util.lang.Generics;
 import org.apache.wicket.util.string.AppendingStringBuffer;
 import org.apache.wicket.util.string.PrependingStringBuffer;
 import org.apache.wicket.util.string.Strings;
@@ -143,7 +144,10 @@ import org.slf4j.LoggerFactory;
  * @param <T>
  *            The model object type
  */
-public class Form<T> extends WebMarkupContainer implements 
IFormSubmitListener, IGenericComponent<T>
+public class Form<T> extends WebMarkupContainer
+       implements
+               IFormSubmitListener,
+               IGenericComponent<T>
 {
        private static final String HIDDEN_DIV_START = "<div 
style=\"width:0px;height:0px;position:absolute;left:-100px;top:-100px;overflow:hidden\">";
 
@@ -1228,14 +1232,8 @@ public class Form<T> extends WebMarkupContainer 
implements IFormSubmitListener,
        {
                final Form<?> processingForm = 
findFormToProcess(submittingComponent);
 
-               // process submitting component (if specified)
-               if (submittingComponent != null)
-               {
-                       // invoke submit on component
-                       submittingComponent.onSubmit();
-               }
-
-               // invoke Form#onSubmit(..) going from innermost to outermost
+               // collect all forms innermost to outermost before any 
hierarchy is changed
+               final List<Form<?>> forms = Generics.newArrayList(3);
                Visits.visitPostOrder(processingForm, new IVisitor<Form<?>, 
Void>()
                {
                        @Override
@@ -1243,11 +1241,24 @@ public class Form<T> extends WebMarkupContainer 
implements IFormSubmitListener,
                        {
                                if (form.isEnabledInHierarchy() && 
form.isVisibleInHierarchy())
                                {
-                                       form.onSubmit();
+                                       forms.add(form);
                                }
                        }
                }, new ClassVisitFilter(Form.class));
 
+               // process submitting component (if specified)
+               if (submittingComponent != null)
+               {
+                       // invoke submit on component
+                       submittingComponent.onSubmit();
+               }
+
+               // invoke Form#onSubmit(..)
+               for (Form<?> form : forms)
+               {
+                       form.onSubmit();
+               }
+
                if (submittingComponent != null)
                {
                        submittingComponent.onAfterSubmit();

Reply via email to