You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2015/04/19 23:22:10 UTC
wicket git commit: WICKET-5883 Feedback messages not cleared for
invisible/disabled form components on submit.
Repository: wicket
Updated Branches:
refs/heads/wicket-6.x 7722b13c5 -> b980efc3a
WICKET-5883 Feedback messages not cleared for invisible/disabled form components on submit.
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/b980efc3
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/b980efc3
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/b980efc3
Branch: refs/heads/wicket-6.x
Commit: b980efc3ad60928d10b5a30e7aac067b2a8b508e
Parents: 7722b13
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Mon Apr 20 00:21:17 2015 +0300
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Mon Apr 20 00:21:17 2015 +0300
----------------------------------------------------------------------
.../wicket/feedback/IFeedbackMessageFilter.java | 6 +-
.../apache/wicket/markup/html/form/Form.java | 2 +-
.../wicket/util/tester/BaseWicketTester.java | 10 +-
...FormValidationDisabledFormComponentTest.java | 154 +++++++++++++++++++
4 files changed, 164 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/b980efc3/wicket-core/src/main/java/org/apache/wicket/feedback/IFeedbackMessageFilter.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/feedback/IFeedbackMessageFilter.java b/wicket-core/src/main/java/org/apache/wicket/feedback/IFeedbackMessageFilter.java
index 83706e5..fdd3057 100644
--- a/wicket-core/src/main/java/org/apache/wicket/feedback/IFeedbackMessageFilter.java
+++ b/wicket-core/src/main/java/org/apache/wicket/feedback/IFeedbackMessageFilter.java
@@ -28,7 +28,7 @@ public interface IFeedbackMessageFilter extends IClusterable
/**
* Filter that returns simply all available messages.
*/
- public static final IFeedbackMessageFilter ALL = new IFeedbackMessageFilter()
+ IFeedbackMessageFilter ALL = new IFeedbackMessageFilter()
{
private static final long serialVersionUID = 1L;
@@ -42,7 +42,7 @@ public interface IFeedbackMessageFilter extends IClusterable
/**
* Filter that does not match any message
*/
- public static final IFeedbackMessageFilter NONE = new IFeedbackMessageFilter()
+ IFeedbackMessageFilter NONE = new IFeedbackMessageFilter()
{
private static final long serialVersionUID = 1L;
@@ -59,4 +59,4 @@ public interface IFeedbackMessageFilter extends IClusterable
* @return True if the message should be included, false to exclude it
*/
boolean accept(FeedbackMessage message);
-}
\ No newline at end of file
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/b980efc3/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 789a804..c7fea42 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
@@ -1141,7 +1141,7 @@ public class Form<T> extends WebMarkupContainer implements IFormSubmitListener,
@Override
public void component(final Component component, final IVisit<Boolean> visit)
{
- if (component.hasErrorMessage())
+ if (component.isVisibleInHierarchy() && component.isEnabledInHierarchy() && component.hasErrorMessage())
{
visit.stop(true);
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/b980efc3/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java b/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
index 4ea50c2..2849c3c 100644
--- a/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
+++ b/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
@@ -122,6 +122,7 @@ import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.request.resource.IResource;
import org.apache.wicket.request.resource.ResourceReference;
import org.apache.wicket.session.ISessionStore.UnboundListener;
+import org.apache.wicket.settings.IApplicationSettings;
import org.apache.wicket.settings.IRequestCycleSettings.RenderStrategy;
import org.apache.wicket.util.lang.Args;
import org.apache.wicket.util.lang.Classes;
@@ -455,13 +456,14 @@ public class BaseWicketTester
* @param filter
* filter used to cleanup messages, accepted messages will be removed
*/
- private void cleanupFeedbackMessages(IFeedbackMessageFilter filter)
+ protected void cleanupFeedbackMessages(IFeedbackMessageFilter filter)
{
- application.getApplicationSettings().setFeedbackMessageCleanupFilter(filter);
+ IApplicationSettings applicationSettings = application.getApplicationSettings();
+ IFeedbackMessageFilter old = applicationSettings.getFeedbackMessageCleanupFilter();
+ applicationSettings.setFeedbackMessageCleanupFilter(filter);
getLastRenderedPage().detach();
getSession().detach();
- application.getApplicationSettings().setFeedbackMessageCleanupFilter(
- IFeedbackMessageFilter.NONE);
+ applicationSettings.setFeedbackMessageCleanupFilter(old);
}
/**
http://git-wip-us.apache.org/repos/asf/wicket/blob/b980efc3/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormValidationDisabledFormComponentTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormValidationDisabledFormComponentTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormValidationDisabledFormComponentTest.java
new file mode 100644
index 0000000..325305c
--- /dev/null
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormValidationDisabledFormComponentTest.java
@@ -0,0 +1,154 @@
+/*
+ * 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 java.util.concurrent.atomic.AtomicBoolean;
+
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.WicketTestCase;
+import org.apache.wicket.feedback.IFeedbackMessageFilter;
+import org.apache.wicket.markup.IMarkupResourceStreamProvider;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.mock.MockApplication;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.util.resource.IResourceStream;
+import org.apache.wicket.util.resource.StringResourceStream;
+import org.apache.wicket.util.tester.FormTester;
+import org.apache.wicket.util.tester.WicketTester;
+import org.junit.Test;
+
+/**
+ * Test case for https://issues.apache.org/jira/browse/WICKET-5883
+ */
+public class FormValidationDisabledFormComponentTest extends WicketTestCase
+{
+ @Override
+ protected WebApplication newApplication()
+ {
+ return new MockApplication()
+ {
+ @Override
+ protected void init()
+ {
+ super.init();
+
+ // make feedback messages not to disappear after page refresh (F5)
+ getApplicationSettings().setFeedbackMessageCleanupFilter(IFeedbackMessageFilter.NONE);
+ }
+ };
+ }
+
+ @Override
+ protected WicketTester newWicketTester(WebApplication app)
+ {
+ return new WicketTester(app)
+ {
+ @Override
+ public void clearFeedbackMessages()
+ {
+ // preserve the configured filter
+ cleanupFeedbackMessages(getApplication().getApplicationSettings().getFeedbackMessageCleanupFilter());
+ }
+ };
+ }
+
+ @Test
+ public void formSubmitsEvenWithInvalidButInvisibleFormComponent()
+ {
+ TestPage page = tester.startPage(TestPage.class);
+ assertFalse(page.onSubmitCalled.get());
+ assertFalse(page.onErrorCalled.get());
+
+ FormTester formTester = tester.newFormTester(page.form.getPageRelativePath());
+ formTester.submit();
+ assertTrue(page.field1.hasErrorMessage());
+ assertFalse(page.onSubmitCalled.get());
+ assertTrue(page.onErrorCalled.get());
+ page.onErrorCalled.set(false);
+
+ page.field1.setVisible(false);
+ formTester = tester.newFormTester(page.form.getPageRelativePath());
+ formTester.submit();
+ assertTrue(page.field1.hasErrorMessage());
+ assertTrue(page.onSubmitCalled.get());
+ assertFalse(page.onErrorCalled.get());
+ }
+
+ @Test
+ public void formSubmitsEvenWithInvalidButDisabledFormComponent()
+ {
+ TestPage page = tester.startPage(TestPage.class);
+ assertFalse(page.onSubmitCalled.get());
+ assertFalse(page.onErrorCalled.get());
+
+ FormTester formTester = tester.newFormTester(page.form.getPageRelativePath());
+ formTester.submit();
+ assertTrue(page.field1.hasErrorMessage());
+ assertFalse(page.onSubmitCalled.get());
+ assertTrue(page.onErrorCalled.get());
+ page.onErrorCalled.set(false);
+
+ page.field1.setEnabled(false);
+ formTester = tester.newFormTester(page.form.getPageRelativePath());
+ formTester.submit();
+ assertTrue(page.field1.hasErrorMessage());
+ assertTrue(page.onSubmitCalled.get());
+ assertFalse(page.onErrorCalled.get());
+ }
+
+ public static class TestPage extends WebPage implements IMarkupResourceStreamProvider
+ {
+ public final AtomicBoolean onSubmitCalled = new AtomicBoolean(false);
+ public final AtomicBoolean onErrorCalled = new AtomicBoolean(false);
+ public final TextField field1;
+ public final Form form;
+
+ public TestPage()
+ {
+ form = new Form("form")
+ {
+ @Override
+ protected void onSubmit()
+ {
+ super.onSubmit();
+ onSubmitCalled.set(true);
+ }
+
+ @Override
+ protected void onError()
+ {
+ super.onError();
+ onErrorCalled.set(true);
+ }
+ };
+ add(form);
+ form.add(field1 = new TextField<String>("field1", Model.of("")));
+ field1.setRequired(true);
+ }
+
+ @Override
+ public IResourceStream getMarkupResourceStream(MarkupContainer container,
+ Class<?> containerClass)
+ {
+ return new StringResourceStream("<html><body>"//
+ + "<form wicket:id='form'><input wicket:id='field1' type='text'/></form>" //
+ + "</body></html>");
+ }
+ }
+
+}