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); + } } } }