Updated Branches:
  refs/heads/master c84073ab0 -> dd1df04b1

WICKET-4616 onError now called post-order, just like onSubmit


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

Branch: refs/heads/master
Commit: dd1df04b166fe02498a410e30fbe6f2deca816a9
Parents: c84073a
Author: Carl-Eric Menzel <[email protected]>
Authored: Sun Jun 24 02:18:13 2012 +0200
Committer: Carl-Eric Menzel <[email protected]>
Committed: Sun Jun 24 02:18:13 2012 +0200

----------------------------------------------------------------------
 .../org/apache/wicket/markup/html/form/Form.java   |   18 ++--
 .../wicket/markup/html/form/FormSubmitTest.java    |   64 +++++++++++----
 .../wicket/markup/html/form/NestedFormsPage.java   |    6 ++
 3 files changed, 62 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/dd1df04b/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 35ac561..53898a6 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
@@ -928,18 +928,19 @@ public class Form<T> extends WebMarkupContainer 
implements IFormSubmitListener
         */
        protected void callOnError(IFormSubmitter submitter)
        {
+               final Form<?> processingForm = findFormToProcess(submitter);
+
                if (submitter != null)
                {
                        submitter.onError();
                }
-               onError();
-               // call onError on nested forms
-               visitChildren(Form.class, new IVisitor<Component, Void>()
+
+               // invoke Form#onSubmit(..) going from innermost to outermost
+               Visits.visitPostOrder(processingForm, new IVisitor<Form<?>, 
Void>()
                {
                        @Override
-                       public void component(final Component component, final 
IVisit<Void> visit)
+                       public void component(Form<?> form, IVisit<Void> visit)
                        {
-                               final Form<?> form = (Form<?>)component;
                                if (!form.isEnabledInHierarchy() || 
!form.isVisibleInHierarchy())
                                {
                                        visit.dontGoDeeper();
@@ -950,7 +951,7 @@ public class Form<T> extends WebMarkupContainer implements 
IFormSubmitListener
                                        form.onError();
                                }
                        }
-               });
+               }, new ClassVisitFilter(Form.class));
        }
 
 
@@ -1208,8 +1209,8 @@ public class Form<T> extends WebMarkupContainer 
implements IFormSubmitListener
         * processing to clients.
         * <p>
         * This implementation first finds out whether the form processing was 
triggered by a nested
-        * IFormSubmittingComponent of this form. If that is the case, that 
component's onSubmit is
-        * called first.
+        * IFormSubmittingComponent of this form. If that is the case, that 
component's
+        * onSubmitBefore/AfterForm methods are called appropriately..
         * </p>
         * <p>
         * Regardless of whether a submitting component was found, the form's 
onSubmit method is called
@@ -1225,7 +1226,6 @@ public class Form<T> extends WebMarkupContainer 
implements IFormSubmitListener
        {
                final Form<?> processingForm = 
findFormToProcess(submittingComponent);
 
-
                // process submitting component (if specified)
                if (submittingComponent != null)
                {

http://git-wip-us.apache.org/repos/asf/wicket/blob/dd1df04b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormSubmitTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormSubmitTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormSubmitTest.java
index 7912583..866e96f 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormSubmitTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormSubmitTest.java
@@ -16,10 +16,10 @@
  */
 package org.apache.wicket.markup.html.form;
 
-import org.apache.wicket.Page;
+import org.apache.wicket.Component;
 import org.apache.wicket.WicketTestCase;
-import org.apache.wicket.markup.html.form.NestedFormsPage.NestableForm;
 import 
org.apache.wicket.core.request.handler.ListenerInvocationNotAllowedException;
+import org.apache.wicket.markup.html.form.NestedFormsPage.NestableForm;
 import org.apache.wicket.util.tester.FormTester;
 import org.junit.Before;
 import org.junit.Test;
@@ -32,26 +32,26 @@ import org.junit.Test;
  */
 public class FormSubmitTest extends WicketTestCase
 {
-       private Page page;
+       private NestedFormsPage page;
        private NestableForm outerForm;
        private NestableForm middleForm;
        private NestableForm innerForm;
 
        /**
-        * 
+        *
         */
        @Before
        public void before()
        {
                tester.startPage(new NestedFormsPage());
-               page = tester.getLastRenderedPage();
+               page = (NestedFormsPage)tester.getLastRenderedPage();
                outerForm = (NestableForm)page.get("outerForm");
                middleForm = (NestableForm)page.get("outerForm:middleForm");
                innerForm = 
(NestableForm)page.get("outerForm:middleForm:innerForm");
        }
 
        /**
-        * 
+        *
         */
        @Test
        public void allFormsEnabledSubmitOuterForm()
@@ -63,10 +63,31 @@ public class FormSubmitTest extends WicketTestCase
 
                assertOnSubmitCalled(true, true, true);
                assertOnErrorCalled(false, false, false);
+               assertSubmitOrder(innerForm, middleForm, outerForm);
+       }
+
+       private void assertSubmitOrder(NestableForm... forms)
+       {
+               assertEquals("not submitted in expected order!", 
joinIds(forms), page.submitOrder);
+       }
+
+       private String joinIds(Component[] comps)
+       {
+               String result = "";
+               for (Component component : comps)
+               {
+                       result += component.getId();
+               }
+               return result;
+       }
+
+       private void assertErrorOrder(NestableForm... forms)
+       {
+               assertEquals("not onError'd in expected order!", 
joinIds(forms), page.errorOrder);
        }
 
        /**
-        * 
+        *
         */
        @Test
        public void allFormsEnabledSubmitMiddleForm()
@@ -78,10 +99,11 @@ public class FormSubmitTest extends WicketTestCase
 
                assertOnSubmitCalled(false, true, true);
                assertOnErrorCalled(false, false, false);
+               assertSubmitOrder(innerForm, middleForm);
        }
 
        /**
-        * 
+        *
         */
        @Test
        public void allFormsEnabledSubmitInnerForm()
@@ -93,10 +115,11 @@ public class FormSubmitTest extends WicketTestCase
 
                assertOnSubmitCalled(false, false, true);
                assertOnErrorCalled(false, false, false);
+               assertSubmitOrder(innerForm);
        }
 
        /**
-        * 
+        *
         */
        @Test
        public void middleFormDisabledSubmitOuterForm()
@@ -111,10 +134,11 @@ public class FormSubmitTest extends WicketTestCase
 
                assertOnSubmitCalled(true, false, false);
                assertOnErrorCalled(false, false, false);
+               assertSubmitOrder(outerForm);
        }
 
        /**
-        * 
+        *
         */
        @Test
        public void innerFormDisabledSubmitOuterForm()
@@ -129,10 +153,11 @@ public class FormSubmitTest extends WicketTestCase
 
                assertOnSubmitCalled(true, true, false);
                assertOnErrorCalled(false, false, false);
+               assertSubmitOrder(middleForm, outerForm);
        }
 
        /**
-        * 
+        *
         */
        @Test
        public void submitDisabledOuterForm()
@@ -155,7 +180,7 @@ public class FormSubmitTest extends WicketTestCase
        }
 
        /**
-        * 
+        *
         */
        @Test
        public void errorOnInnerFormSubmitOuterForm()
@@ -166,10 +191,11 @@ public class FormSubmitTest extends WicketTestCase
 
                assertOnSubmitCalled(false, false, false);
                assertOnErrorCalled(true, true, true);
+               assertErrorOrder(innerForm, middleForm, outerForm);
        }
 
        /**
-        * 
+        *
         */
        @Test
        public void errorOnMiddleFormSubmitOuterForm()
@@ -180,10 +206,11 @@ public class FormSubmitTest extends WicketTestCase
 
                assertOnSubmitCalled(false, false, false);
                assertOnErrorCalled(true, true, false);
+               assertErrorOrder(middleForm, outerForm);
        }
 
        /**
-        * 
+        *
         */
        @Test
        public void errorOnMiddleFormSubmitMiddleForm()
@@ -194,10 +221,11 @@ public class FormSubmitTest extends WicketTestCase
 
                assertOnSubmitCalled(false, false, false);
                assertOnErrorCalled(false, true, false);
+               assertErrorOrder(middleForm);
        }
 
        /**
-        * 
+        *
         */
        @Test
        public void errorOnInnerFormSubmitMiddleForm()
@@ -208,10 +236,11 @@ public class FormSubmitTest extends WicketTestCase
 
                assertOnSubmitCalled(false, false, false);
                assertOnErrorCalled(false, true, true);
+               assertErrorOrder(innerForm, middleForm);
        }
 
        /**
-        * 
+        *
         */
        @Test
        public void middleFormDisabledErrorOnOuterFormSubmitOuterForm()
@@ -223,10 +252,11 @@ public class FormSubmitTest extends WicketTestCase
 
                assertOnSubmitCalled(false, false, false);
                assertOnErrorCalled(true, false, false);
+               assertErrorOrder(outerForm);
        }
 
        /**
-        * 
+        *
         */
        @Test
        public void errorOnInnerFormDisabledMiddleFormSubmitOuterForm()

http://git-wip-us.apache.org/repos/asf/wicket/blob/dd1df04b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/NestedFormsPage.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/NestedFormsPage.java
 
b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/NestedFormsPage.java
index d31e3ec..83f2145 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/NestedFormsPage.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/NestedFormsPage.java
@@ -38,6 +38,10 @@ public class NestedFormsPage extends WebPage
 
        private final FeedbackPanel feedback;
 
+       public String submitOrder = "";
+
+       public String errorOrder = "";
+
        /**
         * Construct.
         */
@@ -116,6 +120,7 @@ public class NestedFormsPage extends WebPage
                        super.onSubmit();
                        onSubmitCalled = true;
                        logger.info(getId() + ".onSubmit");
+                       submitOrder += getId();
                }
 
                @Override
@@ -124,6 +129,7 @@ public class NestedFormsPage extends WebPage
                        super.onError();
                        onErrorCalled = true;
                        logger.info(getId() + ".onError");
+                       errorOrder += getId();
                }
        }
 

Reply via email to