Author: husted
Date: Mon Mar 12 13:05:24 2007
New Revision: 517364
URL: http://svn.apache.org/viewvc?view=rev&rev=517364
Log:
WW-1619 URL component and URLHelper class do not handle multiple request
parameters with the same name correctly when includeParams="get". Apply patch
submitted by Tom Schneider.
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/UrlHelper.java
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/UrlHelper.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/UrlHelper.java?view=diff&rev=517364&r1=517363&r2=517364
==============================================================================
---
struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/UrlHelper.java
(original)
+++
struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/util/UrlHelper.java
Mon Mar 12 13:05:24 2007
@@ -24,9 +24,11 @@
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
-import java.util.Collections;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedHashMap;
+import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
@@ -37,7 +39,6 @@
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.StrutsConstants;
-import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.inject.Inject;
import com.opensymphony.xwork2.util.TextParseUtil;
import com.opensymphony.xwork2.util.ValueStack;
@@ -61,21 +62,21 @@
private static final int DEFAULT_HTTPS_PORT = 443;
private static final String AMP = "&";
-
+
private static int httpPort = DEFAULT_HTTP_PORT;
private static int httpsPort = DEFAULT_HTTPS_PORT;
private static String customEncoding;
-
+
@Inject(StrutsConstants.STRUTS_URL_HTTP_PORT)
public static void setHttpPort(String val) {
httpPort = Integer.parseInt(val);
}
-
+
@Inject(StrutsConstants.STRUTS_URL_HTTPS_PORT)
public static void setHttpsPort(String val) {
httpsPort = Integer.parseInt(val);
}
-
+
@Inject(StrutsConstants.STRUTS_I18N_ENCODING)
public static void setCustomEncoding(String val) {
customEncoding = val;
@@ -297,7 +298,26 @@
}
if (paramName != null) {
String translatedParamValue =
translateAndDecode(paramValue);
- queryParams.put(paramName, translatedParamValue);
+
+ if(queryParams.containsKey(paramName)) {
+ // WW-1619 append new param value to existing
value(s)
+ Object currentParam = queryParams.get(paramName);
+ if(currentParam instanceof String) {
+ queryParams.put(paramName, new String[] {
+ (String) currentParam,
translatedParamValue});
+ } else {
+ String currentParamValues[] = (String[])
currentParam;
+ List paramList = new ArrayList(Arrays
+ .asList(currentParamValues));
+ paramList.add(translatedParamValue);
+ String newParamValues[] = new String[paramList
+ .size()];
+ queryParams.put(paramName, paramList
+ .toArray(newParamValues));
+ }
+ } else {
+ queryParams.put(paramName, translatedParamValue);
+ }
}
}
}