Updated Branches: refs/heads/master 89dd46234 -> 1485a856e
WICKET-4365 Form components' name/value are encoded in stateless form's action url Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/1485a856 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/1485a856 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/1485a856 Branch: refs/heads/master Commit: 1485a856e0a07cf6e9995da61dd1b33fab1d7d60 Parents: 89dd462 Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Mon Jan 30 11:44:29 2012 +0200 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Mon Jan 30 11:45:56 2012 +0200 ---------------------------------------------------------------------- .../org/apache/wicket/markup/html/form/Form.java | 4 -- .../wicket/markup/html/form/StatelessForm.java | 32 +++++++++++++ .../wicket/stateless/StatelessFormUrlTest.java | 35 +++++++++++++- 3 files changed, 64 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/1485a856/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 a0f3654..46dbefc 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 @@ -796,10 +796,6 @@ public class Form<T> extends WebMarkupContainer implements IFormSubmitListener */ public void process(IFormSubmitter submittingComponent) { - // save the page in case the component is removed during submit - final Page page = getPage(); - String hiddenFieldId = getHiddenFieldId(); - if (!isEnabledInHierarchy() || !isVisibleInHierarchy()) { // since process() can be called outside of the default form workflow, an additional http://git-wip-us.apache.org/repos/asf/wicket/blob/1485a856/wicket-core/src/main/java/org/apache/wicket/markup/html/form/StatelessForm.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/StatelessForm.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/StatelessForm.java index 034519c..2442556 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/StatelessForm.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/StatelessForm.java @@ -17,6 +17,9 @@ package org.apache.wicket.markup.html.form; import org.apache.wicket.model.IModel; +import org.apache.wicket.request.mapper.parameter.PageParameters; +import org.apache.wicket.util.visit.IVisit; +import org.apache.wicket.util.visit.IVisitor; /** * This StatelessForm is the same as a normal form but with the statelesshint default to true. The @@ -72,4 +75,33 @@ public class StatelessForm<T> extends Form<T> { return urlFor(IFormSubmitListener.INTERFACE, getPage().getPageParameters()); } + + /** + * Remove the page parameters for all form component otherwise they get appended to action URL + * + * {@inheritDoc} + */ + @Override + public void process(IFormSubmitter submittingComponent) + { + super.process(submittingComponent); + + final PageParameters parameters = getPage().getPageParameters(); + if (parameters != null) + { + visitFormComponents(new IVisitor<FormComponent<?>, Void>() + { + public void component(final FormComponent<?> formComponent, final IVisit<Void> visit) + { + parameters.remove(formComponent.getInputName()); + } + }); + parameters.remove(getHiddenFieldId()); + if (submittingComponent instanceof AbstractSubmitLink) + { + AbstractSubmitLink submitLink = (AbstractSubmitLink)submittingComponent; + parameters.remove(submitLink.getInputName()); + } + } + } } http://git-wip-us.apache.org/repos/asf/wicket/blob/1485a856/wicket-core/src/test/java/org/apache/wicket/stateless/StatelessFormUrlTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/stateless/StatelessFormUrlTest.java b/wicket-core/src/test/java/org/apache/wicket/stateless/StatelessFormUrlTest.java index 181932c..070e0e3 100644 --- a/wicket-core/src/test/java/org/apache/wicket/stateless/StatelessFormUrlTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/stateless/StatelessFormUrlTest.java @@ -17,14 +17,20 @@ package org.apache.wicket.stateless; import org.apache.wicket.MarkupContainer; +import org.apache.wicket.Page; import org.apache.wicket.WicketTestCase; import org.apache.wicket.markup.IMarkupResourceStreamProvider; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.form.StatelessForm; import org.apache.wicket.markup.html.form.SubmitLink; +import org.apache.wicket.markup.html.form.TextField; +import org.apache.wicket.mock.MockApplication; +import org.apache.wicket.model.Model; +import org.apache.wicket.protocol.http.WebApplication; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.util.resource.IResourceStream; import org.apache.wicket.util.resource.StringResourceStream; +import org.apache.wicket.util.tester.FormTester; import org.junit.Test; /** @@ -32,17 +38,38 @@ import org.junit.Test; */ public class StatelessFormUrlTest extends WicketTestCase { + @Override + protected WebApplication newApplication() + { + return new MockApplication() { + @Override + public Class<? extends Page> getHomePage() + { + return TestPage.class; + } + }; + } + /** * Preventing WICKET-3438 */ @Test public void submitLinkInputNameNotEncodedIntoFormAction() { - tester.startPage(TestPage.class); - tester.clickLink("form:submitLink"); + tester.executeUrl("?0-1.IFormSubmitListener-form&text=newValue&submitLink=x"); assertFalse(tester.getLastResponseAsString().contains("submitLink=x")); } + /** + * https://issues.apache.org/jira/browse/WICKET-4365 + */ + @Test + public void formComponentNameNotEncodedIntoFormAction() + { + tester.executeUrl("?0-1.IFormSubmitListener-form&text=newValue"); + assertFalse(tester.getLastResponseAsString().contains("text=newValue")); + } + /** */ public static class TestPage extends WebPage implements IMarkupResourceStreamProvider { @@ -57,6 +84,8 @@ public class StatelessFormUrlTest extends WicketTestCase super(pageParameters); StatelessForm<Void> form = new StatelessForm<Void>("form"); add(form); + TextField textField = new TextField("text", Model.of("textValue")); + form.add(textField); SubmitLink submitLink = new SubmitLink("submitLink"); form.add(submitLink); } @@ -66,7 +95,7 @@ public class StatelessFormUrlTest extends WicketTestCase Class<?> containerClass) { return new StringResourceStream( - "<html><body><form wicket:id=\"form\"><a wicket:id=\"submitLink\"></a></form></body></html>"); + "<html><body><form wicket:id=\"form\"><input wicket:id=\"text\"><a wicket:id=\"submitLink\"></a></form></body></html>"); } }
