Repository: wicket Updated Branches: refs/heads/master d71d384a0 -> 1d8a9c780
WICKET-6324 optional for all callbacks Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/1d8a9c78 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/1d8a9c78 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/1d8a9c78 Branch: refs/heads/master Commit: 1d8a9c780756130fad77135aa54717552bdd41c9 Parents: d71d384 Author: Sven Meier <svenme...@apache.org> Authored: Thu Feb 23 12:39:54 2017 +0100 Committer: Sven Meier <svenme...@apache.org> Committed: Thu Feb 23 12:39:54 2017 +0100 ---------------------------------------------------------------------- .../markup/html/form/AjaxFallbackButton.java | 14 ++-- .../java/org/apache/wicket/ajax/HomePage.java | 5 -- .../wicket/ajax/form/AjaxFormSubmitTest.java | 76 ++++++++++++++++---- .../ajax/form/AjaxFormSubmitTestPage.java | 50 +++++++++---- .../form/AjaxFormSubmitTestPage_expected.html | 14 ++-- .../html/form/FormWithMultipleButtonsTest.java | 5 -- .../devutils/inspector/EnhancedPageView.java | 7 +- 7 files changed, 115 insertions(+), 56 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/1d8a9c78/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxFallbackButton.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxFallbackButton.java b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxFallbackButton.java index 8fd7ad8..f24dd22 100644 --- a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxFallbackButton.java +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxFallbackButton.java @@ -73,19 +73,19 @@ public abstract class AjaxFallbackButton extends Button @Override protected void onSubmit(AjaxRequestTarget target) { - AjaxFallbackButton.this.onSubmit(Optional.ofNullable(target)); + AjaxFallbackButton.this.onSubmit(Optional.of(target)); } @Override protected void onAfterSubmit(AjaxRequestTarget target) { - AjaxFallbackButton.this.onAfterSubmit(target); + AjaxFallbackButton.this.onAfterSubmit(Optional.of(target)); } @Override protected void onError(AjaxRequestTarget target) { - AjaxFallbackButton.this.onError(target); + AjaxFallbackButton.this.onError(Optional.of(target)); } @Override @@ -119,7 +119,7 @@ public abstract class AjaxFallbackButton extends Button * @param target * @param form */ - protected void onError(AjaxRequestTarget target) + protected void onError(Optional<AjaxRequestTarget> target) { } @@ -128,7 +128,7 @@ public abstract class AjaxFallbackButton extends Button { if (getRequestCycle().find(AjaxRequestTarget.class).isPresent() == false) { - onError(null); + onError(Optional.empty()); } } @@ -152,7 +152,7 @@ public abstract class AjaxFallbackButton extends Button { if (getRequestCycle().find(AjaxRequestTarget.class).isPresent() == false) { - onAfterSubmit(null); + onAfterSubmit(Optional.empty()); } } @@ -188,7 +188,7 @@ public abstract class AjaxFallbackButton extends Button * ajax target if this linked was invoked using ajax, null otherwise * @param form */ - protected void onAfterSubmit(final AjaxRequestTarget target) + protected void onAfterSubmit(final Optional<AjaxRequestTarget> target) { } http://git-wip-us.apache.org/repos/asf/wicket/blob/1d8a9c78/wicket-core/src/test/java/org/apache/wicket/ajax/HomePage.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/ajax/HomePage.java b/wicket-core/src/test/java/org/apache/wicket/ajax/HomePage.java index d8ed36b..bc0b5cb 100644 --- a/wicket-core/src/test/java/org/apache/wicket/ajax/HomePage.java +++ b/wicket-core/src/test/java/org/apache/wicket/ajax/HomePage.java @@ -104,11 +104,6 @@ public class HomePage extends WebPage listView.removeAll(); targetOptional.ifPresent(target -> target.add(listViewContainer)); } - - @Override - protected void onError(AjaxRequestTarget target) - { - } }.setDefaultFormProcessing(false)); } } http://git-wip-us.apache.org/repos/asf/wicket/blob/1d8a9c78/wicket-core/src/test/java/org/apache/wicket/ajax/form/AjaxFormSubmitTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/ajax/form/AjaxFormSubmitTest.java b/wicket-core/src/test/java/org/apache/wicket/ajax/form/AjaxFormSubmitTest.java index 90bff48..0569f7f 100644 --- a/wicket-core/src/test/java/org/apache/wicket/ajax/form/AjaxFormSubmitTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/ajax/form/AjaxFormSubmitTest.java @@ -22,34 +22,56 @@ import org.apache.wicket.util.tester.WicketTestCase; import org.junit.Test; /** - * Test case for WICKET-1291 - * - * @see <a href="https://issues.apache.org/jira/browse/WICKET-1291">WICKET-1291</a> * @author marrink */ public class AjaxFormSubmitTest extends WicketTestCase { + @Test + public void submit() + { + AjaxFormSubmitTestPage page = new AjaxFormSubmitTestPage(true); + + tester.startPage(page); + tester.assertRenderedPage(page.getClass()); + FormTester form = tester.newFormTester("form"); + form.setValue("txt1", "txt1"); + form.setValue("txt2", "txt2"); + // mark the button as the one being pressed. there is a 'p::' infront of name because wicket + // escapes "submit" input names as they break browsers + tester.getRequest().getPostParameters().setParameterValue("p::submit", "x"); + tester.submitForm(form.getForm()); + tester.assertRenderedPage(page.getClass()); + assertTrue((page.getFormSubmitted() & AjaxFormSubmitTestPage.FORM_SUBMIT) > 0); + assertFalse((page.getFormSubmitted() & AjaxFormSubmitTestPage.FORM_ERROR) > 0); + assertTrue((page.getFormSubmitted() & AjaxFormSubmitTestPage.BUTTON_SUBMIT) > 0); + assertFalse((page.getFormSubmitted() & AjaxFormSubmitTestPage.BUTTON_ERROR) > 0); + assertEquals("txt1", tester.getComponentFromLastRenderedPage("form:txt1") + .getDefaultModelObject()); + assertEquals("txt2", tester.getComponentFromLastRenderedPage("form:txt2") + .getDefaultModelObject()); + } + /** * Test ajax form submit without default form processing. + * + * @see <a href="https://issues.apache.org/jira/browse/WICKET-1291">WICKET-1291</a> */ @Test public void submitNoDefProcessing() { - Class<? extends Page> pageClass = AjaxFormSubmitTestPage.class; - System.out.println("=== " + pageClass.getName() + " ==="); + AjaxFormSubmitTestPage page = new AjaxFormSubmitTestPage(false); - tester.startPage(pageClass); - tester.assertRenderedPage(pageClass); + tester.startPage(page); + tester.assertRenderedPage(page.getClass()); FormTester form = tester.newFormTester("form"); form.setValue("txt1", "txt1"); form.setValue("txt2", "txt2"); - // mark the button as the one being pressed. there is a ':' infront of name because wicket - // escapes "submit" input names as they break browsers - tester.getRequest().getPostParameters().setParameterValue(":submit", "x"); tester.executeAjaxEvent("form:submit", "click"); - AjaxFormSubmitTestPage page = (AjaxFormSubmitTestPage)tester.getLastRenderedPage(); - assertFalse((page.getFormSubmitted() & AjaxFormSubmitTestPage.FORM) == AjaxFormSubmitTestPage.FORM); - assertTrue((page.getFormSubmitted() & AjaxFormSubmitTestPage.BUTTON) == AjaxFormSubmitTestPage.BUTTON); + tester.assertRenderedPage(page.getClass()); + assertFalse((page.getFormSubmitted() & AjaxFormSubmitTestPage.FORM_SUBMIT) > 0); + assertFalse((page.getFormSubmitted() & AjaxFormSubmitTestPage.FORM_ERROR) > 0); + assertTrue((page.getFormSubmitted() & AjaxFormSubmitTestPage.BUTTON_SUBMIT) > 0); + assertFalse((page.getFormSubmitted() & AjaxFormSubmitTestPage.BUTTON_ERROR) > 0); assertEquals("foo", tester.getComponentFromLastRenderedPage("form:txt1") .getDefaultModelObject()); assertEquals("bar", tester.getComponentFromLastRenderedPage("form:txt2") @@ -57,6 +79,32 @@ public class AjaxFormSubmitTest extends WicketTestCase } /** + * Test ajax fallback with errors. + * + * @see <a href="https://issues.apache.org/jira/browse/WICKET-6324">WICKET-6324</a> + */ + @Test + public void submitFallbackErrors() + { + AjaxFormSubmitTestPage page = new AjaxFormSubmitTestPage(true); + + tester.startPage(page); + tester.assertRenderedPage(page.getClass()); + FormTester form = tester.newFormTester("form"); + form.setValue("txt1", ""); + form.setValue("txt2", ""); + // mark the button as the one being pressed. there is a 'p::' infront of name because wicket + // escapes "submit" input names as they break browsers + tester.getRequest().getPostParameters().setParameterValue("p::submit", "x"); + tester.submitForm(form.getForm()); + tester.assertRenderedPage(page.getClass()); + assertFalse((page.getFormSubmitted() & AjaxFormSubmitTestPage.FORM_SUBMIT) > 0); + assertTrue((page.getFormSubmitted() & AjaxFormSubmitTestPage.FORM_ERROR) > 0); + assertFalse((page.getFormSubmitted() & AjaxFormSubmitTestPage.BUTTON_SUBMIT) > 0); + assertTrue((page.getFormSubmitted() & AjaxFormSubmitTestPage.BUTTON_ERROR) > 0); + } + + /** * Test that onclick handler is generated with the proper XHTML entities for special characters, * notably ampersand. See WICKET-2033. * @@ -65,7 +113,7 @@ public class AjaxFormSubmitTest extends WicketTestCase @Test public void eventJavaScriptEscaped() throws Exception { - tester.startPage(AjaxFormSubmitTestPage.class); + tester.startPage(new AjaxFormSubmitTestPage(false)); tester.assertResultPage(AjaxFormSubmitTestPage.class, "AjaxFormSubmitTestPage_expected.html"); } http://git-wip-us.apache.org/repos/asf/wicket/blob/1d8a9c78/wicket-core/src/test/java/org/apache/wicket/ajax/form/AjaxFormSubmitTestPage.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/ajax/form/AjaxFormSubmitTestPage.java b/wicket-core/src/test/java/org/apache/wicket/ajax/form/AjaxFormSubmitTestPage.java index b90ba7c..2f799b3 100644 --- a/wicket-core/src/test/java/org/apache/wicket/ajax/form/AjaxFormSubmitTestPage.java +++ b/wicket-core/src/test/java/org/apache/wicket/ajax/form/AjaxFormSubmitTestPage.java @@ -16,6 +16,8 @@ */ package org.apache.wicket.ajax.form; +import static org.junit.Assert.assertEquals; + import java.util.Optional; import org.apache.wicket.ajax.AjaxRequestTarget; @@ -36,11 +38,22 @@ public class AjaxFormSubmitTestPage extends WebPage /** * Indicates form handled submit. */ - public static final int FORM = 2; + public static final int FORM_SUBMIT = 1; + + /** + * Indicates form handled error. + */ + public static final int FORM_ERROR = 2; + /** * Indicates button handled submit. */ - public static final int BUTTON = 4; + public static final int BUTTON_SUBMIT = 4; + + /** + * Indicates button handled error. + */ + public static final int BUTTON_ERROR = 8; private int formSubmitted; @@ -57,7 +70,7 @@ public class AjaxFormSubmitTestPage extends WebPage /** * Construct. */ - public AjaxFormSubmitTestPage() + public AjaxFormSubmitTestPage(boolean defaultProcessing) { super(new CompoundPropertyModel<ValueMap>(new ValueMap("txt1=foo,txt2=bar"))); Form<?> form = new Form<Void>("form") @@ -67,12 +80,18 @@ public class AjaxFormSubmitTestPage extends WebPage @Override protected void onSubmit() { - formSubmitted = formSubmitted | FORM; + formSubmitted = formSubmitted | FORM_SUBMIT; + } + + @Override + protected void onError() + { + formSubmitted = formSubmitted | FORM_ERROR; } }; add(form); - form.add(new TextField<String>("txt1")); - form.add(new TextField<String>("txt2")); + form.add(new TextField<String>("txt1").setRequired(true)); + form.add(new TextField<String>("txt2").setRequired(true)); form.add(new AjaxFallbackButton("submit", form) { private static final long serialVersionUID = 1L; @@ -80,15 +99,20 @@ public class AjaxFormSubmitTestPage extends WebPage @Override protected void onSubmit(Optional<AjaxRequestTarget> target) { - formSubmitted = formSubmitted | BUTTON; + assertEquals(target.isPresent(), getRequestCycle().find(AjaxRequestTarget.class).isPresent()); + formSubmitted = formSubmitted | BUTTON_SUBMIT; } - - @Override - protected void onError(AjaxRequestTarget target) - { + + protected void onError(Optional<AjaxRequestTarget> target) { + assertEquals(target.isPresent(), getRequestCycle().find(AjaxRequestTarget.class).isPresent()); + + formSubmitted = formSubmitted | BUTTON_ERROR; } - - }.setDefaultFormProcessing(false)); + + protected void onAfterSubmit(Optional<AjaxRequestTarget> target) { + assertEquals(target.isPresent(), getRequestCycle().find(AjaxRequestTarget.class).isPresent()); + } + }.setDefaultFormProcessing(defaultProcessing)); } http://git-wip-us.apache.org/repos/asf/wicket/blob/1d8a9c78/wicket-core/src/test/java/org/apache/wicket/ajax/form/AjaxFormSubmitTestPage_expected.html ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/ajax/form/AjaxFormSubmitTestPage_expected.html b/wicket-core/src/test/java/org/apache/wicket/ajax/form/AjaxFormSubmitTestPage_expected.html index 7f12beb..c5b441e 100644 --- a/wicket-core/src/test/java/org/apache/wicket/ajax/form/AjaxFormSubmitTestPage_expected.html +++ b/wicket-core/src/test/java/org/apache/wicket/ajax/form/AjaxFormSubmitTestPage_expected.html @@ -1,8 +1,8 @@ <html> - <head><script type="text/javascript" src="../resource/org.apache.wicket.resource.JQueryResourceReference/jquery/jquery-1.12.4.js"></script> -<script type="text/javascript" src="../resource/org.apache.wicket.ajax.AbstractDefaultAjaxBehavior/res/js/wicket-event-jquery.js"></script> -<script type="text/javascript" src="../resource/org.apache.wicket.ajax.AbstractDefaultAjaxBehavior/res/js/wicket-ajax-jquery.js"></script> -<script type="text/javascript" src="../resource/org.apache.wicket.ajax.AbstractDefaultAjaxBehavior/res/js/wicket-ajax-jquery-debug.js"></script> + <head><script type="text/javascript" src="./resource/org.apache.wicket.resource.JQueryResourceReference/jquery/jquery-1.12.4.js"></script> +<script type="text/javascript" src="./resource/org.apache.wicket.ajax.AbstractDefaultAjaxBehavior/res/js/wicket-event-jquery.js"></script> +<script type="text/javascript" src="./resource/org.apache.wicket.ajax.AbstractDefaultAjaxBehavior/res/js/wicket-ajax-jquery.js"></script> +<script type="text/javascript" src="./resource/org.apache.wicket.ajax.AbstractDefaultAjaxBehavior/res/js/wicket-ajax-jquery-debug.js"></script> <script type="text/javascript" id="wicket-ajax-debug-enable"> /*<![CDATA[*/ Wicket.Ajax.DebugWindow.enabled=true; @@ -10,19 +10,19 @@ Wicket.Ajax.DebugWindow.enabled=true; </script> <script type="text/javascript" id="wicket-ajax-base-url"> /*<![CDATA[*/ -Wicket.Ajax.baseUrl="wicket/bookmarkable/org.apache.wicket.ajax.form.AjaxFormSubmitTestPage?0"; +Wicket.Ajax.baseUrl="wicket/page?0"; /*]]>*/ </script> <script type="text/javascript" > /*<![CDATA[*/ Wicket.Event.add(window, "domready", function(event) { -Wicket.Ajax.ajax({"u":"./org.apache.wicket.ajax.form.AjaxFormSubmitTestPage?0-1.0-form-submit","m":"POST","c":"submit2","f":"form1","sc":"p::submit","e":"click","pd":true});; +Wicket.Ajax.ajax({"u":"./page?0-1.0-form-submit","m":"POST","c":"submit2","f":"form1","sc":"p::submit","e":"click","pd":true});; Wicket.Event.publish(Wicket.Event.Topic.AJAX_HANDLERS_BOUND); ;}); /*]]>*/ </script> </head><body> - <form wicket:id="form" id="form1" method="post" action="./org.apache.wicket.ajax.form.AjaxFormSubmitTestPage?0-1.-form"><div style="width:0px;height:0px;position:absolute;left:-100px;top:-100px;overflow:hidden"><input type="hidden" name="form1_hf_0" id="form1_hf_0" /></div> + <form wicket:id="form" id="form1" method="post" action="./page?0-1.-form"><div style="width:0px;height:0px;position:absolute;left:-100px;top:-100px;overflow:hidden"><input type="hidden" name="form1_hf_0" id="form1_hf_0" /></div> <input type="text" wicket:id="txt1" value="foo" name="txt1"/> <input type="text" wicket:id="txt2" value="bar" name="txt2"/> <input type="submit" value="Submit" wicket:id="submit" name="p::submit" id="submit2"/> http://git-wip-us.apache.org/repos/asf/wicket/blob/1d8a9c78/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormWithMultipleButtonsTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormWithMultipleButtonsTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormWithMultipleButtonsTest.java index 448d1ff..9a66640 100644 --- a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormWithMultipleButtonsTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormWithMultipleButtonsTest.java @@ -124,11 +124,6 @@ public class FormWithMultipleButtonsTest extends WicketTestCase { submitSequence.add(this); } - - @Override - protected void onError(AjaxRequestTarget target) - { - } }); } http://git-wip-us.apache.org/repos/asf/wicket/blob/1d8a9c78/wicket-devutils/src/main/java/org/apache/wicket/devutils/inspector/EnhancedPageView.java ---------------------------------------------------------------------- diff --git a/wicket-devutils/src/main/java/org/apache/wicket/devutils/inspector/EnhancedPageView.java b/wicket-devutils/src/main/java/org/apache/wicket/devutils/inspector/EnhancedPageView.java index 501347b..50856ed 100644 --- a/wicket-devutils/src/main/java/org/apache/wicket/devutils/inspector/EnhancedPageView.java +++ b/wicket-devutils/src/main/java/org/apache/wicket/devutils/inspector/EnhancedPageView.java @@ -294,12 +294,9 @@ public final class EnhancedPageView extends GenericPanel<Page> private static final long serialVersionUID = 1L; @Override - protected void onAfterSubmit(AjaxRequestTarget target) + protected void onAfterSubmit(Optional<AjaxRequestTarget> target) { - if (target != null) - { - target.add(componentTree); - } + target.ifPresent(t -> t.add(componentTree)); } });