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 2012/01/30 10:44:49 UTC

git commit: WICKET-4365 Form components' name/value are encoded in stateless form's action url

Updated Branches:
  refs/heads/wicket-1.5.x c5a12bd56 -> acf47396a


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/acf47396
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/acf47396
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/acf47396

Branch: refs/heads/wicket-1.5.x
Commit: acf47396abb3c0b9d8a369eeb21d99e31209c41f
Parents: c5a12bd
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Mon Jan 30 11:44:29 2012 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Mon Jan 30 11:44:29 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/acf47396/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 b4ea1e8..3db22c8 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
@@ -790,10 +790,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/acf47396/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/acf47396/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 bc4eff9..4d868e5 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);
 		}
@@ -65,7 +94,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>");
 		}
 
 	}