Author: tmjee Date: Sat Apr 22 22:17:20 2006 New Revision: 396216 URL: http://svn.apache.org/viewcvs?rev=396216&view=rev Log: ww-1267
Modified: incubator/webwork2/action/src/main/java/org/apache/struts/action2/components/URL.java incubator/webwork2/action/src/main/java/org/apache/struts/action2/views/util/UrlHelper.java incubator/webwork2/action/src/test/java/org/apache/struts/action2/views/util/UrlHelperTest.java Modified: incubator/webwork2/action/src/main/java/org/apache/struts/action2/components/URL.java URL: http://svn.apache.org/viewcvs/incubator/webwork2/action/src/main/java/org/apache/struts/action2/components/URL.java?rev=396216&r1=396215&r2=396216&view=diff ============================================================================== --- incubator/webwork2/action/src/main/java/org/apache/struts/action2/components/URL.java (original) +++ incubator/webwork2/action/src/main/java/org/apache/struts/action2/components/URL.java Sat Apr 22 22:17:20 2006 @@ -178,7 +178,8 @@ if(!(DispatcherUtils.isPortletSupportActive() && PortletActionContext.isPortletRequest())) { String query = extractQueryString(); if (query != null) { - mergeRequestParameters(parameters, HttpUtils.parseQueryString(query)); + //mergeRequestParameters(parameters, HttpUtils.parseQueryString(query)); + mergeRequestParameters(parameters, UrlHelper.parseQueryString(query)); } } } Modified: incubator/webwork2/action/src/main/java/org/apache/struts/action2/views/util/UrlHelper.java URL: http://svn.apache.org/viewcvs/incubator/webwork2/action/src/main/java/org/apache/struts/action2/views/util/UrlHelper.java?rev=396216&r1=396215&r2=396216&view=diff ============================================================================== --- incubator/webwork2/action/src/main/java/org/apache/struts/action2/views/util/UrlHelper.java (original) +++ incubator/webwork2/action/src/main/java/org/apache/struts/action2/views/util/UrlHelper.java Sat Apr 22 22:17:20 2006 @@ -30,9 +30,11 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; import java.net.URLEncoder; import java.util.Collections; import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.Map; @@ -217,21 +219,65 @@ * @return the translated and encoded string */ public static String translateAndEncode(String input) { - OgnlValueStack valueStack = ServletActionContext.getContext().getValueStack(); - String output = TextParseUtil.translateVariables(input, valueStack); + String translatedInput = translateVariable(input); + String encoding = getEncodingFromConfiguration(); - final String encoding; - if (Configuration.isSet(StrutsConstants.STRUTS_I18N_ENCODING)) { - encoding = Configuration.getString(StrutsConstants.STRUTS_I18N_ENCODING); - } else { - encoding = "UTF-8"; + try { + return URLEncoder.encode(translatedInput, encoding); + } catch (UnsupportedEncodingException e) { + LOG.warn("Could not encode URL parameter '" + input + "', returning value un-encoded"); + return translatedInput; } + } + + public static String translateAndDecode(String input) { + String translatedInput = translateVariable(input); + String encoding = getEncodingFromConfiguration(); try { - return URLEncoder.encode(output, encoding); + return URLDecoder.decode(translatedInput, encoding); } catch (UnsupportedEncodingException e) { LOG.warn("Could not encode URL parameter '" + input + "', returning value un-encoded"); - return output; + return translatedInput; + } + } + + private static String translateVariable(String input) { + OgnlValueStack valueStack = ServletActionContext.getContext().getValueStack(); + String output = TextParseUtil.translateVariables(input, valueStack); + return output; + } + + private static String getEncodingFromConfiguration() { + final String encoding; + if (Configuration.isSet(StrutsConstants.STRUTS_I18N_ENCODING)) { + encoding = Configuration.getString(StrutsConstants.STRUTS_I18N_ENCODING); + } else { + encoding = "UTF-8"; } + return encoding; + } + + public static Map parseQueryString(String queryString) { + Map queryParams = new LinkedHashMap(); + if (queryString != null) { + String[] params = queryString.split("&"); + for (int a=0; a< params.length; a++) { + String[] tmpParams = params[a].split("="); + String paramName = null; + String paramValue = ""; + if (tmpParams.length > 0) { + paramName = tmpParams[0]; + } + if (tmpParams.length > 1) { + paramValue = tmpParams[1]; + } + if (paramName != null) { + String translatedParamValue = translateAndDecode(paramValue); + queryParams.put(paramName, translatedParamValue); + } + } + } + return queryParams; } } Modified: incubator/webwork2/action/src/test/java/org/apache/struts/action2/views/util/UrlHelperTest.java URL: http://svn.apache.org/viewcvs/incubator/webwork2/action/src/test/java/org/apache/struts/action2/views/util/UrlHelperTest.java?rev=396216&r1=396215&r2=396216&view=diff ============================================================================== --- incubator/webwork2/action/src/test/java/org/apache/struts/action2/views/util/UrlHelperTest.java (original) +++ incubator/webwork2/action/src/test/java/org/apache/struts/action2/views/util/UrlHelperTest.java Sat Apr 22 22:17:20 2006 @@ -52,6 +52,7 @@ String result = UrlHelper.buildUrl("/path1/path2/myAction.action", (HttpServletRequest) mockHttpServletRequest.proxy(), (HttpServletResponse)mockHttpServletResponse.proxy(), null, "http", true, true, true); assertEquals(expectedUrl, result); + mockHttpServletRequest.verify(); } public void testDoNotForceAddSchemeHostAndPort() throws Exception { @@ -269,5 +270,28 @@ String urlString = UrlHelper.buildUrl(actionName, (HttpServletRequest) mockHttpServletRequest.proxy(), (HttpServletResponse) mockHttpServletResponse.proxy(), params, "https", true, true); assertEquals(expectedString, urlString); + } + + + public void testParseQuery() throws Exception { + Map result = UrlHelper.parseQueryString("aaa=aaaval&bbb=bbbval&ccc="); + + assertEquals(result.get("aaa"), "aaaval"); + assertEquals(result.get("bbb"), "bbbval"); + assertEquals(result.get("ccc"), ""); + } + + public void testTranslateAndEncode() throws Exception { + String result = UrlHelper.translateAndEncode("\u65b0\u805e"); + String expectedResult = "%E6%96%B0%E8%81%9E"; + + assertEquals(result, expectedResult); + } + + public void testTranslateAndDecode() throws Exception { + String result = UrlHelper.translateAndDecode("%E6%96%B0%E8%81%9E"); + String expectedResult = "\u65b0\u805e"; + + assertEquals(result, expectedResult); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]