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/17 11:12:41 UTC
git commit: WICKET-4338 POST params ignored by
IPageParametersEncoder#decodePageParameters()
Updated Branches:
refs/heads/wicket-1.5.x 87245722e -> 426d0f708
WICKET-4338
POST params ignored by IPageParametersEncoder#decodePageParameters()
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/426d0f70
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/426d0f70
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/426d0f70
Branch: refs/heads/wicket-1.5.x
Commit: 426d0f708f0a8b9fcf8701bda26a6609631b230b
Parents: 8724572
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Tue Jan 17 11:12:35 2012 +0100
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Tue Jan 17 11:12:35 2012 +0100
----------------------------------------------------------------------
.../mapper/parameter/PageParametersEncoder.java | 15 ++-
.../parameter/UrlPathPageParametersEncoder.java | 3 +
.../CombinedRequestParametersAdapter.java | 10 +-
.../parameter/UrlRequestParametersAdapter.java | 4 +-
.../parameter/PageParametersEncoderTest.java | 126 +++++++++++++++
5 files changed, 147 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/426d0f70/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParametersEncoder.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParametersEncoder.java b/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParametersEncoder.java
index 2312995..5687a71 100644
--- a/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParametersEncoder.java
+++ b/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/PageParametersEncoder.java
@@ -16,9 +16,13 @@
*/
package org.apache.wicket.request.mapper.parameter;
+import java.util.List;
+
+import org.apache.wicket.request.IRequestParameters;
import org.apache.wicket.request.Request;
import org.apache.wicket.request.Url;
import org.apache.wicket.request.Url.QueryParameter;
+import org.apache.wicket.util.string.StringValue;
/**
* Simple encoder with direct indexed/named parameters mapping.
@@ -47,10 +51,15 @@ public class PageParametersEncoder implements IPageParametersEncoder
parameters.set(i, s);
++i;
}
-
- for (QueryParameter p : request.getUrl().getQueryParameters())
+
+ IRequestParameters requestParameters = request.getRequestParameters();
+ for (String paramName : requestParameters.getParameterNames())
{
- parameters.add(p.getName(), p.getValue());
+ List<StringValue> parameterValues = requestParameters.getParameterValues(paramName);
+ for (StringValue paramValue : parameterValues)
+ {
+ parameters.add(paramName, paramValue);
+ }
}
return parameters.isEmpty() ? null : parameters;
http://git-wip-us.apache.org/repos/asf/wicket/blob/426d0f70/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/UrlPathPageParametersEncoder.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/UrlPathPageParametersEncoder.java b/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/UrlPathPageParametersEncoder.java
index db3ea51..f31f5c1 100644
--- a/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/UrlPathPageParametersEncoder.java
+++ b/wicket-request/src/main/java/org/apache/wicket/request/mapper/parameter/UrlPathPageParametersEncoder.java
@@ -25,9 +25,12 @@ import org.apache.wicket.util.string.Strings;
/**
+ * <p>
* Encodes page parameters into Url path fragments instead of the query string like the default
* {@link PageParametersEncoder}. The parameters are encoded in the following format:
* {@code /param1Name/param1Value/param2Name/param2Value}.
+ * </p>
+ * <strong>Note</strong>: Because of the nature of the encoder it doesn't support POST request parameters.
* <p>
* This used to be the default way of encoding page parameters in 1.4.x applications. Newer 1.5.x+
* applications use the query string, by default. This class facilitates backwards compatibility and
http://git-wip-us.apache.org/repos/asf/wicket/blob/426d0f70/wicket-request/src/main/java/org/apache/wicket/request/parameter/CombinedRequestParametersAdapter.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/main/java/org/apache/wicket/request/parameter/CombinedRequestParametersAdapter.java b/wicket-request/src/main/java/org/apache/wicket/request/parameter/CombinedRequestParametersAdapter.java
index e895f3b..b5792cc 100755
--- a/wicket-request/src/main/java/org/apache/wicket/request/parameter/CombinedRequestParametersAdapter.java
+++ b/wicket-request/src/main/java/org/apache/wicket/request/parameter/CombinedRequestParametersAdapter.java
@@ -19,10 +19,12 @@ package org.apache.wicket.request.parameter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import org.apache.wicket.request.IRequestParameters;
+import org.apache.wicket.util.lang.Args;
import org.apache.wicket.util.string.StringValue;
/**
@@ -41,11 +43,7 @@ public class CombinedRequestParametersAdapter implements IRequestParameters
*/
public CombinedRequestParametersAdapter(final IRequestParameters... parameters)
{
- if (parameters == null)
- {
- throw new IllegalStateException("Argument 'parameters' may not be null");
- }
- this.parameters = parameters;
+ this.parameters = Args.notNull(parameters, "parameters");
}
/**
@@ -53,7 +51,7 @@ public class CombinedRequestParametersAdapter implements IRequestParameters
*/
public Set<String> getParameterNames()
{
- Set<String> result = new HashSet<String>();
+ Set<String> result = new LinkedHashSet<String>();
for (IRequestParameters p : parameters)
{
result.addAll(p.getParameterNames());
http://git-wip-us.apache.org/repos/asf/wicket/blob/426d0f70/wicket-request/src/main/java/org/apache/wicket/request/parameter/UrlRequestParametersAdapter.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/main/java/org/apache/wicket/request/parameter/UrlRequestParametersAdapter.java b/wicket-request/src/main/java/org/apache/wicket/request/parameter/UrlRequestParametersAdapter.java
index d65d1d6..bbdd1da 100755
--- a/wicket-request/src/main/java/org/apache/wicket/request/parameter/UrlRequestParametersAdapter.java
+++ b/wicket-request/src/main/java/org/apache/wicket/request/parameter/UrlRequestParametersAdapter.java
@@ -18,7 +18,7 @@ package org.apache.wicket.request.parameter;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.HashSet;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
@@ -55,7 +55,7 @@ public class UrlRequestParametersAdapter implements IRequestParameters
*/
public Set<String> getParameterNames()
{
- Set<String> result = new HashSet<String>();
+ Set<String> result = new LinkedHashSet<String>();
for (QueryParameter parameter : url.getQueryParameters())
{
result.add(parameter.getName());
http://git-wip-us.apache.org/repos/asf/wicket/blob/426d0f70/wicket-request/src/test/java/org/apache/wicket/request/mapper/parameter/PageParametersEncoderTest.java
----------------------------------------------------------------------
diff --git a/wicket-request/src/test/java/org/apache/wicket/request/mapper/parameter/PageParametersEncoderTest.java b/wicket-request/src/test/java/org/apache/wicket/request/mapper/parameter/PageParametersEncoderTest.java
new file mode 100644
index 0000000..e07439f
--- /dev/null
+++ b/wicket-request/src/test/java/org/apache/wicket/request/mapper/parameter/PageParametersEncoderTest.java
@@ -0,0 +1,126 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.request.mapper.parameter;
+
+import java.nio.charset.Charset;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.wicket.request.IRequestParameters;
+import org.apache.wicket.request.Request;
+import org.apache.wicket.request.Url;
+import org.apache.wicket.util.string.StringValue;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Tests for PageParametersEncoder
+ */
+public class PageParametersEncoderTest extends Assert
+{
+ /**
+ * Tests that PageParametersEncoder decodes both GET and POST parameters
+ * @throws Exception
+ */
+ @Test
+ public void decodePostParameters() throws Exception
+ {
+ PageParametersEncoder encoder = new PageParametersEncoder();
+ Request request = new Request()
+ {
+ @Override
+ public Url getUrl()
+ {
+ return Url.parse("idx1/idx2?named1=value1&named2=value2");
+ }
+
+ @Override
+ public Url getClientUrl()
+ {
+ return null;
+ }
+
+ @Override
+ public Locale getLocale()
+ {
+ return null;
+ }
+
+ @Override
+ public Charset getCharset()
+ {
+ return null;
+ }
+
+ @Override
+ public Object getContainerRequest()
+ {
+ return null;
+ }
+
+ @Override
+ public IRequestParameters getPostParameters()
+ {
+ return new PostParameters();
+ }
+ };
+
+ PageParameters pageParameters = encoder.decodePageParameters(request);
+ assertEquals("idx1", pageParameters.get(0).toOptionalString());
+ assertEquals("idx2", pageParameters.get(1).toOptionalString());
+ assertEquals("value1", pageParameters.get("named1").toOptionalString());
+ assertEquals("value2", pageParameters.get("named2").toOptionalString());
+ assertEquals("1", pageParameters.get("postOne").toOptionalString());
+ assertEquals("2", pageParameters.getValues("postTwo").get(0).toOptionalString());
+ assertEquals("2.1", pageParameters.getValues("postTwo").get(1).toOptionalString());
+ }
+
+ /**
+ * Mock IRequestParameters that provides static POST parameters
+ */
+ private static class PostParameters implements IRequestParameters
+ {
+ private final Map<String, List<StringValue>> params = new HashMap<String, List<StringValue>>();
+ {
+ params.put("postOne", Arrays.asList(StringValue.valueOf("1")));
+ params.put("postTwo", Arrays.asList(StringValue.valueOf("2"), StringValue.valueOf("2.1")));
+ }
+
+ public Set<String> getParameterNames()
+ {
+ return params.keySet();
+ }
+
+ public StringValue getParameterValue(String name)
+ {
+ List<StringValue> values = params.get(name);
+ return (values != null && !values.isEmpty()) ? values.get(0)
+ : StringValue.valueOf((String)null);
+ }
+
+ public List<StringValue> getParameterValues(String name)
+ {
+ List<StringValue> values = params.get(name);
+ return values != null ? Collections.unmodifiableList(values) : null;
+ }
+ }
+}