Repository: wicket Updated Branches: refs/heads/master b8e1d5ce8 -> 3824853be
WICKET-6292 revert WICKET-6041 - should not access parameters before handling multipart This reverts commit ba393ffa2bf6480d4981e4b48c7aa6a19bd5b9c6. This reverts commit ece7575f5ea74ec27f88618fd287e4348aa9cc35. Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/3824853b Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/3824853b Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/3824853b Branch: refs/heads/master Commit: 3824853be87af927dcde0b9cc6761f59738051a9 Parents: b8e1d5c Author: Sven Meier <svenme...@apache.org> Authored: Tue Dec 6 12:46:17 2016 +0100 Committer: Sven Meier <svenme...@apache.org> Committed: Tue Dec 6 14:29:21 2016 +0100 ---------------------------------------------------------------------- .../apache/wicket/markup/html/form/Form.java | 91 +++++++++----------- .../markup/html/form/NestedFormsTest.java | 79 ----------------- 2 files changed, 41 insertions(+), 129 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/3824853b/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 a197dd8..e8b61e7 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 @@ -24,6 +24,8 @@ import java.util.List; import java.util.Locale; import java.util.Map; +import javax.servlet.http.HttpServletRequest; + import org.apache.commons.fileupload.FileUploadBase; import org.apache.commons.fileupload.FileUploadException; import org.apache.wicket.Component; @@ -70,8 +72,6 @@ import org.apache.wicket.util.visit.Visits; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.http.HttpServletRequest; - /** * Container for {@link FormComponent}s (such as {@link CheckBox}es, {@link ListChoice}s or @@ -739,15 +739,10 @@ public class Form<T> extends WebMarkupContainer * * @see Form#validate() */ - public final void onFormSubmitted(final IFormSubmitter submitter) + public final void onFormSubmitted(IFormSubmitter submitter) { - final IFormSubmitter actualSubmitter = submitter != null ? submitter : - findActualSubmitter(); - //find the actual form to process - final Form<?> formToProcess = findFormToProcess(actualSubmitter); - - formToProcess.markFormsSubmitted(); - + markFormsSubmitted(); + if (handleMultiPart()) { // Tells FormComponents that a new user input has come @@ -762,19 +757,49 @@ public class Form<T> extends WebMarkupContainer } else { + // First, see if the processing was triggered by a Wicket IFormSubmittingComponent + if (submitter == null) + { + submitter = findSubmittingButton(); + + if (submitter instanceof IFormSubmittingComponent) + { + IFormSubmittingComponent submittingComponent = (IFormSubmittingComponent)submitter; + Component component = (Component)submitter; + + if (!component.isVisibleInHierarchy()) + { + throw new WicketRuntimeException("Submit Button " + + submittingComponent.getInputName() + " (path=" + + component.getPageRelativePath() + ") is not visible"); + } + + if (!component.isEnabledInHierarchy()) + { + throw new WicketRuntimeException("Submit Button " + + submittingComponent.getInputName() + " (path=" + + component.getPageRelativePath() + ") is not enabled"); + } + } + } + // When processing was triggered by a Wicket IFormSubmittingComponent and that // component indicates it wants to be called immediately // (without processing), call the IFormSubmittingComponent.onSubmit* methods right // away. - if (actualSubmitter != null && !actualSubmitter.getDefaultFormProcessing()) + if (submitter != null && !submitter.getDefaultFormProcessing()) { - actualSubmitter.onSubmit(); - actualSubmitter.onAfterSubmit(); + submitter.onSubmit(); + submitter.onAfterSubmit(); } else { + // the submit request might be for one of the nested forms, so let's + // find the right one: + final Form<?> formToProcess = findFormToProcess(submitter); + // process the form for this request - formToProcess.process(actualSubmitter); + formToProcess.process(submitter); } } } @@ -782,7 +807,7 @@ public class Form<T> extends WebMarkupContainer // onError else if (hasError()) { - callOnError(actualSubmitter); + callOnError(submitter); } // update auto labels if we are inside an ajax request @@ -797,41 +822,6 @@ public class Form<T> extends WebMarkupContainer }); }); } - - /** - * Find the actual submitter for this form. If such component - * is found but it's not enabled or visible, an exception is thrown. - * - * @return the actual submitter - */ - private IFormSubmitter findActualSubmitter() - { - IFormSubmitter actualSubmitter = findSubmittingButton(); - - if (actualSubmitter instanceof IFormSubmittingComponent) - { - IFormSubmittingComponent submittingComponent = (IFormSubmittingComponent)actualSubmitter; - Component component = (Component)actualSubmitter; - - if (!component.isVisibleInHierarchy()) - { - throw new WicketRuntimeException("Submit Button " + - submittingComponent.getInputName() + " (" + - component.toString(true) + - ") is not visible"); - } - - if (!component.isEnabledInHierarchy()) - { - throw new WicketRuntimeException("Submit Button " + - submittingComponent.getInputName() + " (" + - component.toString(true) + - ") is not enabled"); - } - } - - return actualSubmitter; - } /** * This method finds the correct form that should be processed based on the submitting component @@ -910,6 +900,7 @@ public class Form<T> extends WebMarkupContainer * * @return Whether this form wants to be submitted too if a nested form is submitted. */ + // TODO wicket-7 migration guide: changed from public to protected protected boolean wantSubmitOnNestedFormSubmit() { return false; http://git-wip-us.apache.org/repos/asf/wicket/blob/3824853b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/NestedFormsTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/NestedFormsTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/NestedFormsTest.java index 5090e24..6b5b8c4 100644 --- a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/NestedFormsTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/NestedFormsTest.java @@ -21,7 +21,6 @@ import java.util.List; import org.apache.wicket.Component; import org.apache.wicket.MarkupContainer; -import org.apache.wicket.ajax.markup.html.form.AjaxButton; import org.apache.wicket.markup.IMarkupResourceStreamProvider; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.util.resource.IResourceStream; @@ -65,85 +64,7 @@ public class NestedFormsTest extends WicketTestCase assertEquals(0, testPage.submitSequence.indexOf(testPage.innerSubmit)); assertEquals(1, testPage.submitSequence.indexOf(testPage.innerForm)); } - - @SuppressWarnings("unchecked") - @Test - public void subitInnerFormWithAjaxBehavior() - { - tester.startPage(TestAjaxPage.class); - FormTester formTester = tester.newFormTester("formA"); - formTester.submit("formB:submit"); - - TestAjaxPage testPage = (TestAjaxPage)tester.getLastRenderedPage(); - - assertFalse(testPage.isFormAsubmitted()); - assertTrue(testPage.isFormBsubmitted()); - } - - public static class TestAjaxPage extends WebPage implements IMarkupResourceStreamProvider - { - /** - * - */ - private static final long serialVersionUID = 1L; - private boolean formAsubmitted; - private boolean formBsubmitted; - - public TestAjaxPage() - { - final Form<Void> formA = new Form<Void>("formA") - { - @Override - public void onDetach() - { - formAsubmitted = isSubmitted(); - super.onDetach(); - } - }; - final Form<Void> formB = new Form<Void>("formB") - { - @Override - protected void onDetach() - { - formBsubmitted = isSubmitted(); - super.onDetach(); - } - }; - - formB.add(new AjaxButton("submit") - { - private static final long serialVersionUID = 1L; - }); - - formA.add(formB); - add(formA); - } - - @Override - public IResourceStream getMarkupResourceStream(MarkupContainer container, - Class<?> containerClass) - { - return new StringResourceStream( - "<head></head>" + - "<form wicket:id=\"formA\">\r\n" + - " Form A\r\n" + - " <form wicket:id=\"formB\">\r\n" + - " Form B\r\n" + - " <button wicket:id=\"submit\">submit</button>\r\n" + - " </form>\r\n" + - " </form>"); - } - - public boolean isFormAsubmitted() { - return formAsubmitted; - } - - public boolean isFormBsubmitted() { - return formBsubmitted; - } - } - /** */ public static class TestPage extends WebPage implements IMarkupResourceStreamProvider {