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