You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by tm...@apache.org on 2006/04/23 07:17:22 UTC
svn commit: r396216 - in /incubator/webwork2/action/src:
main/java/org/apache/struts/action2/components/URL.java
main/java/org/apache/struts/action2/views/util/UrlHelper.java
test/java/org/apache/struts/action2/views/util/UrlHelperTest.java
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: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org