WICKET-6114 FormComponentPanel#clearInput() should delegate to its 
FormComponent children


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

Branch: refs/heads/lambdas
Commit: d470dd0c99be2b37e82d8063080f954d4de7795c
Parents: c303678
Author: Martin Tzvetanov Grigorov <[email protected]>
Authored: Tue Mar 8 20:27:04 2016 +0100
Committer: Martin Tzvetanov Grigorov <[email protected]>
Committed: Tue Mar 8 23:21:14 2016 +0100

----------------------------------------------------------------------
 .../wicket/markup/html/form/FormComponent.java  |  2 +-
 .../markup/html/form/FormComponentPanel.java    | 15 +++++++++++
 .../form/FormComponentPanelProcessingTest.java  | 27 ++++++++++++++++++++
 3 files changed, 43 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/d470dd0c/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java
index 266def3..012bff7 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java
@@ -634,7 +634,7 @@ public abstract class FormComponent<T> extends 
LabeledWebMarkupContainer impleme
        /**
         * Clears the user input.
         */
-       public final void clearInput()
+       public void clearInput()
        {
                rawInput = NO_RAW_INPUT;
        }

http://git-wip-us.apache.org/repos/asf/wicket/blob/d470dd0c/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponentPanel.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponentPanel.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponentPanel.java
index fb7b961..0112614 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponentPanel.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponentPanel.java
@@ -21,6 +21,7 @@ import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.html.panel.IMarkupSourcingStrategy;
 import org.apache.wicket.markup.html.panel.PanelMarkupSourcingStrategy;
 import org.apache.wicket.model.IModel;
+import org.apache.wicket.util.visit.IVisitor;
 
 /**
  * Panel (has it's own markup, defined between <wicket:panel> tags), that can 
act as a form
@@ -158,4 +159,18 @@ public abstract class FormComponentPanel<T> extends 
FormComponent<T> implements
                tag.remove("name");
                tag.remove("disabled");
        }
+
+       @Override
+       public void clearInput()
+       {
+               super.clearInput();
+
+               // Visit all the (visible) form components and clear the input 
on each.
+               visitFormComponentsPostOrder(this, (IVisitor<FormComponent<?>, 
Void>) (formComponent, visit) -> {
+                       if (formComponent != FormComponentPanel.this && 
formComponent.isVisibleInHierarchy())
+                       {
+                               formComponent.clearInput();
+                       }
+               });
+       }
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/d470dd0c/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormComponentPanelProcessingTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormComponentPanelProcessingTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormComponentPanelProcessingTest.java
index 193d7a8..4562d24 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormComponentPanelProcessingTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormComponentPanelProcessingTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.markup.html.form;
 
+import static org.hamcrest.Matchers.is;
+
 import java.io.Serializable;
 
 import org.apache.wicket.MarkupContainer;
@@ -50,6 +52,19 @@ public class FormComponentPanelProcessingTest extends 
WicketTestCase
                ft.submit();
        }
 
+       @Test
+       public void clearInput()
+       {
+               tester.startPage(new TestPage());
+               tester.assertRenderedPage(TestPage.class);
+
+               TestFormComponentPanel fcp = (TestFormComponentPanel) 
tester.getComponentFromLastRenderedPage("form:panel");
+               assertThat(fcp.isChildClearInputCalled(), is(false));
+
+               fcp.clearInput();
+               assertThat(fcp.isChildClearInputCalled(), is(true));
+       }
+
        private static class TestFormComponentPanel extends 
FormComponentPanel<Serializable>
                implements
                        IMarkupResourceStreamProvider
@@ -58,6 +73,7 @@ public class FormComponentPanelProcessingTest extends 
WicketTestCase
 
                private boolean childValidated = false;
                private boolean childModelUpdated = false;
+               private boolean childClearInputCalled = false;
 
                private TestFormComponentPanel(String id, IModel<Serializable> 
model)
                {
@@ -79,9 +95,20 @@ public class FormComponentPanelProcessingTest extends 
WicketTestCase
                                        super.updateModel();
                                        childModelUpdated = true;
                                }
+
+                               @Override
+                               public void clearInput()
+                               {
+                                       super.clearInput();
+                                       childClearInputCalled = true;
+                               }
                        });
                }
 
+               private boolean isChildClearInputCalled() {
+                       return childClearInputCalled;
+               }
+
                @Override
                protected void onBeforeRender()
                {

Reply via email to