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() {
