Repository: wicket Updated Branches: refs/heads/wicket-7.x a89f2a7b7 -> 163d5c14b
WICKET-6455 AjaxFormSubmitBehavior doesn't submit inner forms Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/163d5c14 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/163d5c14 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/163d5c14 Branch: refs/heads/wicket-7.x Commit: 163d5c14b4577382b9924701336b84b0cbaa13ec Parents: a89f2a7 Author: Andrea Del Bene <[email protected]> Authored: Wed Aug 23 11:07:40 2017 +0200 Committer: Andrea Del Bene <[email protected]> Committed: Wed Aug 23 11:26:36 2017 +0200 ---------------------------------------------------------------------- .../ajax/form/AjaxFormSubmitBehavior.java | 12 +++- .../ajax/form/AjaxFormSubmitBehaviorTest.java | 64 ++++++++++++++++++-- 2 files changed, 69 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/163d5c14/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehavior.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehavior.java b/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehavior.java index 69ff89a..2d2f07f 100644 --- a/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehavior.java +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehavior.java @@ -168,7 +168,17 @@ public abstract class AjaxFormSubmitBehavior extends AjaxEventBehavior @Override protected void onEvent(final AjaxRequestTarget target) { - getForm().getRootForm().onFormSubmitted(new AjaxFormSubmitBehavior.AjaxFormSubmitter(this, target)); + AjaxFormSubmitBehavior.AjaxFormSubmitter submitter = new AjaxFormSubmitBehavior.AjaxFormSubmitter(this, target); + Form<?> form = getForm(); + + form.getRootForm().onFormSubmitted(submitter); + + //the target form might have wantSubmitOnParentFormSubmit returning "false" + //so it must be explicitly submitted. + if (!form.isSubmitted()) + { + form.onFormSubmitted(submitter); + } } /** http://git-wip-us.apache.org/repos/asf/wicket/blob/163d5c14/wicket-core/src/test/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehaviorTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehaviorTest.java b/wicket-core/src/test/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehaviorTest.java index 1fe4dad..48f55a9 100644 --- a/wicket-core/src/test/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehaviorTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/ajax/form/AjaxFormSubmitBehaviorTest.java @@ -16,17 +16,20 @@ */ package org.apache.wicket.ajax.form; +import org.apache.wicket.ajax.markup.html.form.AjaxButton; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.util.tester.FormTester; +import org.apache.wicket.util.tester.NestedFormPage; import org.apache.wicket.util.tester.WicketTestCase; import org.junit.Test; -/** - * Test case for WICKET-1743 - * - * @see <a href="https://issues.apache.org/jira/browse/WICKET-1743">WICKET-1743</a> - */ public class AjaxFormSubmitBehaviorTest extends WicketTestCase { - /** */ + /** + * Test case for WICKET-1743 + * + * @see <a href="https://issues.apache.org/jira/browse/WICKET-1743">WICKET-1743</a> + */ @Test public void ajaxFormSubmitBehavior() { @@ -40,4 +43,53 @@ public class AjaxFormSubmitBehaviorTest extends WicketTestCase tester.executeAjaxEvent(testForm.getTextField(), "change"); assertTrue(testForm.isSubmitedByAjaxBehavior()); } + + /** + * https://issues.apache.org/jira/browse/WICKET-6455 + */ + @Test + public void innerFormSubmit() + { + tester.startPage(NestedFormTestPage.class); + + NestedFormTestPage homePage = (NestedFormTestPage)tester.getLastRenderedPage(); + assertFalse(homePage.innerFormSubmitted); + + FormTester formTester = tester.newFormTester("outer:inner"); + formTester.submit("submit"); + + assertTrue(homePage.innerFormSubmitted); + } + + public static class NestedFormTestPage extends NestedFormPage + { + + public boolean innerFormSubmitted = false; + + public NestedFormTestPage() + { + Form<?> outer = new Form("outer"); + replace(outer); + + Form<?> inner = new Form("inner") + { + @Override + protected boolean wantSubmitOnParentFormSubmit() + { + return false; + } + + @Override + protected void onSubmit() + { + super.onSubmit(); + innerFormSubmitted = true; + } + }; + + outer.add(inner); + + inner.add(new AjaxButton("submit", inner) {}); + } + } } \ No newline at end of file
