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]

Reply via email to