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 2019/10/07 19:04:20 UTC
[wicket] branch master updated: WICKET-6708 FormComponent should
read only the GET/POST parameters of the request, not both
This is an automated email from the ASF dual-hosted git repository.
mgrigorov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/wicket.git
The following commit(s) were added to refs/heads/master by this push:
new 0c19cf8 WICKET-6708 FormComponent should read only the GET/POST parameters of the request, not both
0c19cf8 is described below
commit 0c19cf8f1ba9d1677303fa7a38c1df04c9becd3f
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
AuthorDate: Mon Oct 7 22:03:22 2019 +0300
WICKET-6708 FormComponent should read only the GET/POST parameters of the request, not both
---
.../RestartResponseAtInterceptPageException.java | 4 +-
.../wicket/markup/html/form/FormComponent.java | 49 ++++++++++++++++++++--
.../protocol/http/servlet/ServletWebRequest.java | 2 +-
.../ajax/markup/html/AjaxEditableTest.java | 10 +++--
.../markup/html/form/select/SelectTest.java | 23 +++++-----
.../markup/html/form/select/SelectTestPage.java | 4 +-
6 files changed, 70 insertions(+), 22 deletions(-)
diff --git a/wicket-core/src/main/java/org/apache/wicket/RestartResponseAtInterceptPageException.java b/wicket-core/src/main/java/org/apache/wicket/RestartResponseAtInterceptPageException.java
index e592f69..c34fcb1 100644
--- a/wicket-core/src/main/java/org/apache/wicket/RestartResponseAtInterceptPageException.java
+++ b/wicket-core/src/main/java/org/apache/wicket/RestartResponseAtInterceptPageException.java
@@ -154,7 +154,7 @@ public class RestartResponseAtInterceptPageException extends ResetResponseExcept
}
}
- data.postParameters = new HashMap<String, List<StringValue>>();
+ data.postParameters = new HashMap<>();
for (String s : request.getPostParameters().getParameterNames())
{
if (WebRequest.PARAM_AJAX.equals(s) || WebRequest.PARAM_AJAX_BASE_URL.equals(s) ||
@@ -162,7 +162,7 @@ public class RestartResponseAtInterceptPageException extends ResetResponseExcept
{
continue;
}
- data.postParameters.put(s, new ArrayList<StringValue>(request.getPostParameters()
+ data.postParameters.put(s, new ArrayList<>(request.getPostParameters()
.getParameterValues(s)));
}
session.setMetaData(key, data);
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java
index 976a553..0713582 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java
@@ -31,6 +31,8 @@ import java.util.Locale;
import java.util.Map;
import java.util.Set;
+import javax.servlet.http.HttpServletRequest;
+
import org.apache.wicket.Application;
import org.apache.wicket.Component;
import org.apache.wicket.IConverterLocator;
@@ -46,6 +48,9 @@ import org.apache.wicket.model.IModel;
import org.apache.wicket.model.IObjectClassAwareModel;
import org.apache.wicket.model.IPropertyReflectionAwareModel;
import org.apache.wicket.model.Model;
+import org.apache.wicket.request.IRequestParameters;
+import org.apache.wicket.request.Request;
+import org.apache.wicket.request.parameter.EmptyRequestParameters;
import org.apache.wicket.util.convert.ConversionException;
import org.apache.wicket.util.convert.IConverter;
import org.apache.wicket.util.lang.Args;
@@ -754,8 +759,7 @@ public abstract class FormComponent<T> extends LabeledWebMarkupContainer impleme
*/
public String[] getInputAsArray()
{
- List<StringValue> list = getRequest().getRequestParameters().getParameterValues(
- getInputName());
+ List<StringValue> list = getParameterValues(getInputName());
String[] values = null;
if (list != null)
@@ -784,6 +788,45 @@ public abstract class FormComponent<T> extends LabeledWebMarkupContainer impleme
}
/**
+ * Reads the value(s) of the request parameter with name <em>inputName</em>
+ * from either the query parameters for <em>GET</em> method or the request body
+ * for <em>POST</em> method.
+ *
+ * @param inputName
+ * The name of the request parameter
+ * @return The parameter's value(s)
+ */
+ protected List<StringValue> getParameterValues(String inputName)
+ {
+ String method = Form.METHOD_POST;
+ final Form form = findParent(Form.class);
+ final Request request = getRequest();
+ if (getRequest().getContainerRequest() instanceof HttpServletRequest)
+ {
+ method = ((HttpServletRequest) getRequest().getContainerRequest()).getMethod();
+ }
+ else if (form != null)
+ {
+ method = form.getMethod();
+ }
+
+ final IRequestParameters parameters;
+ switch (method)
+ {
+ case Form.METHOD_POST:
+ parameters = request.getPostParameters();
+ break;
+ case Form.METHOD_GET:
+ parameters = request.getQueryParameters();
+ break;
+ default:
+ parameters = EmptyRequestParameters.INSTANCE;
+ }
+
+ return parameters.getParameterValues(inputName);
+ }
+
+ /**
* Gets the string to be used for the <tt>name</tt> attribute of the form element. Generated
* using the path from the form to the component, excluding the form itself. Override it if you
* want even a smaller name. E.g. if you know for sure that the id is unique within a form.
@@ -1565,7 +1608,7 @@ public abstract class FormComponent<T> extends LabeledWebMarkupContainer impleme
*
* If the model object does not yet exists, a new suitable collection is filled with the converted
* input and used as the new model object. Otherwise the existing collection is modified
- * in-place, then {@link Model#setObject(Object)} is called with the same instance: it allows
+ * in-place, then {@link IModel#setObject(Object)} is called with the same instance: it allows
* the Model to be notified of changes even when {@link Model#getObject()} returns a different
* {@link Collection} at every invocation.
*
diff --git a/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java b/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java
index e8fb669..a69660b 100644
--- a/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java
+++ b/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java
@@ -264,7 +264,7 @@ public class ServletWebRequest extends WebRequest
@Override
public List<String> getHeaders(String name)
{
- List<String> result = new ArrayList<String>();
+ List<String> result = new ArrayList<>();
Enumeration<String> e = httpServletRequest.getHeaders(name);
while (e.hasMoreElements())
{
diff --git a/wicket-extensions/src/test/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableTest.java b/wicket-extensions/src/test/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableTest.java
index 4083705..316201f 100644
--- a/wicket-extensions/src/test/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableTest.java
+++ b/wicket-extensions/src/test/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableTest.java
@@ -24,10 +24,12 @@ import java.util.Arrays;
import org.apache.wicket.Page;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.behavior.AbstractAjaxBehavior;
+import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.IObjectClassAwareModel;
import org.apache.wicket.model.Model;
+import org.apache.wicket.protocol.http.mock.MockHttpServletRequest;
import org.apache.wicket.request.IWritableRequestParameters;
import org.apache.wicket.util.string.StringValue;
import org.apache.wicket.util.tester.WicketTestCase;
@@ -138,8 +140,10 @@ public class AjaxEditableTest extends WicketTestCase
FormComponent<?> editor = (FormComponent<?>)ajaxLabel.get("editor");
// set some new value and submit it
- tester.getRequest().setParameter(editor.getInputName(), "something");
- tester.getRequest().setParameter("save", "true");
+ final MockHttpServletRequest request = tester.getRequest();
+ request.setParameter(editor.getInputName(), "something");
+ request.setParameter("save", "true");
+ request.setMethod(Form.METHOD_GET);
tester.executeBehavior((AbstractAjaxBehavior)editor.getBehaviorById(0));
tester.assertInvisible("ajaxLabel:editor");
@@ -174,4 +178,4 @@ public class AjaxEditableTest extends WicketTestCase
assertTrue(integerModel.getObject() instanceof Integer);
}
-}
\ No newline at end of file
+}
diff --git a/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/form/select/SelectTest.java b/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/form/select/SelectTest.java
index 6bb79d2..a234b00 100644
--- a/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/form/select/SelectTest.java
+++ b/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/form/select/SelectTest.java
@@ -19,6 +19,7 @@ package org.apache.wicket.extensions.markup.html.form.select;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
+import org.apache.wicket.util.tester.FormTester;
import org.apache.wicket.util.tester.WicketTestCase;
import org.junit.jupiter.api.Test;
@@ -30,7 +31,6 @@ public class SelectTest extends WicketTestCase
/**
* WICKET-4276
- *
*/
@Test
public void rawInputKeepsSelectionOnError() {
@@ -38,9 +38,10 @@ public class SelectTest extends WicketTestCase
tester.startPage(page);
- tester.getRequest().setParameter("select", page.option1.getValue());
+ final FormTester formTester = tester.newFormTester("form");
+ formTester.setValue("select", "option1");
- tester.submitForm(page.form);
+ formTester.submit();
// form has error ...
assertTrue(page.form.hasError());
@@ -53,9 +54,10 @@ public class SelectTest extends WicketTestCase
// ... even after re-render
assertTrue(page.select.isSelected(page.option1));
- tester.getRequest().setParameter("select", page.option1.getValue());
- tester.getRequest().setParameter("text", "text is required");
- tester.submitForm(page.form);
+ final FormTester formTester2 = tester.newFormTester("form");
+ formTester2.setValue("select", "option1");
+ formTester2.setValue("text", "text is required");
+ formTester2.submit();
// ... until successful submit without rawInput
assertFalse(page.select.hasRawInput());
@@ -68,7 +70,6 @@ public class SelectTest extends WicketTestCase
@Test
public void selectionWithouEquals()
{
-
SelectTestPage2 page = new SelectTestPage2();
assertTrue(page.select.isSelected(page.option0));
@@ -80,13 +81,13 @@ public class SelectTest extends WicketTestCase
@Test
public void optionText()
{
-
SelectTestPage3 page = new SelectTestPage3();
tester.startPage(page);
- assertTrue(tester.getLastResponseAsString().contains("<1>"));
- assertTrue(tester.getLastResponseAsString().contains("<2>"));
- assertTrue(tester.getLastResponseAsString().contains("<3>"));
+ final String lastResponseAsString = tester.getLastResponseAsString();
+ assertTrue(lastResponseAsString.contains("<1>"));
+ assertTrue(lastResponseAsString.contains("<2>"));
+ assertTrue(lastResponseAsString.contains("<3>"));
}
}
diff --git a/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/form/select/SelectTestPage.java b/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/form/select/SelectTestPage.java
index e8eeae9..c87a504 100644
--- a/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/form/select/SelectTestPage.java
+++ b/wicket-extensions/src/test/java/org/apache/wicket/extensions/markup/html/form/select/SelectTestPage.java
@@ -35,7 +35,7 @@ public class SelectTestPage extends WebPage
form = new Form<>("form");
add(form);
- select = new Select<>("select", new Model<String>(null));
+ select = new Select<>("select", new Model<>(null));
form.add(select);
select.add(new SelectOption<>("option0", new Model<>("OPTION_0")));
@@ -44,4 +44,4 @@ public class SelectTestPage extends WebPage
form.add(new TextField<>("text", new Model<>(null)).setRequired(true));
}
-}
\ No newline at end of file
+}