Index: src/java/com/opensymphony/webwork/components/URL.java
===================================================================
RCS file: /cvs/webwork/src/java/com/opensymphony/webwork/components/URL.java,v
retrieving revision 1.31
diff -u -r1.31 URL.java
--- src/java/com/opensymphony/webwork/components/URL.java	27 Mar 2006 04:13:16 -0000	1.31
+++ src/java/com/opensymphony/webwork/components/URL.java	27 May 2006 23:56:22 -0000
@@ -144,7 +144,8 @@
         // no explicit url set so attach params from current url, do
         // this at start so body params can override any of these they wish.
         try {
-            String includeParams = null;
+            // ww-1266
+            String includeParams = GET;
 
             if (this.includeParams != null) {
                 includeParams = findString(this.includeParams);
@@ -174,7 +175,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));
             }
         }
     }
Index: src/java/com/opensymphony/webwork/views/util/UrlHelper.java
===================================================================
RCS file: /cvs/webwork/src/java/com/opensymphony/webwork/views/util/UrlHelper.java,v
retrieving revision 1.25
diff -u -r1.25 UrlHelper.java
--- src/java/com/opensymphony/webwork/views/util/UrlHelper.java	25 Feb 2006 11:36:42 -0000	1.25
+++ src/java/com/opensymphony/webwork/views/util/UrlHelper.java	27 May 2006 23:56:25 -0000
@@ -13,9 +13,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;
 
 
@@ -201,21 +203,66 @@
      * @return the translated and encoded string
      */
     public static String translateAndEncode(String input) {
-        OgnlValueStack valueStack = ServletActionContext.getContext().getValueStack();
+        String translatedInput = translateVariable(input);
+        String encoding = getEncodingFromConfiguration();
+
+        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 URLDecoder.decode(translatedInput, encoding);
+        } catch (UnsupportedEncodingException e) {
+            LOG.warn("Could not encode URL parameter '" + input + "', returning value un-encoded");
+            return translatedInput;
+        }
+    }
+
+    private static String translateVariable(String input) {
+    	OgnlValueStack valueStack = ServletActionContext.getContext().getValueStack();
         String output = TextParseUtil.translateVariables(input, valueStack);
+        return output;
+    }
 
-        final String encoding;
+    private static String getEncodingFromConfiguration() {
+    	final String encoding;
+        
         if (Configuration.isSet(WebWorkConstants.WEBWORK_I18N_ENCODING)) {
             encoding = Configuration.getString(WebWorkConstants.WEBWORK_I18N_ENCODING);
         } else {
             encoding = "UTF-8";
         }
+        return encoding;
+    }
 
-        try {
-            return URLEncoder.encode(output, encoding);
-        } catch (UnsupportedEncodingException e) {
-            LOG.warn("Could not encode URL parameter '" + input + "', returning value un-encoded");
-            return output;
-        }
+    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;
     }
 }
Index: src/test/com/opensymphony/webwork/views/jsp/URLTagTest.java
===================================================================
RCS file: /cvs/webwork/src/test/com/opensymphony/webwork/views/jsp/URLTagTest.java,v
retrieving revision 1.19
diff -u -r1.19 URLTagTest.java
--- src/test/com/opensymphony/webwork/views/jsp/URLTagTest.java	19 Mar 2006 12:50:49 -0000	1.19
+++ src/test/com/opensymphony/webwork/views/jsp/URLTagTest.java	27 May 2006 23:56:26 -0000
@@ -4,10 +4,19 @@
  */
 package com.opensymphony.webwork.views.jsp;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import javax.servlet.jsp.JspException;
 import javax.servlet.jsp.JspWriter;
 import java.io.StringWriter;
 
+import com.opensymphony.webwork.components.URL;
+import org.springframework.mock.web.MockHttpServletRequest;
+import org.springframework.mock.web.MockHttpServletResponse;
+                                                                        
+import com.opensymphony.xwork.util.OgnlValueStack;
+
 
 /**
  * Unit test for {@link URLTag}.
@@ -18,6 +27,32 @@
 public class URLTagTest extends AbstractUITagTest {
 
     private URLTag tag;
+
+    public void testIncludeParamsDefaultToGET() throws Exception {
+    	request.setQueryString("one=oneVal&two=twoVal&three=threeVal");
+
+    	// request parameter map should not have any effect, as includeParams
+    	// default to GET, which get its param from request.getQueryString()
+    	Map tmp = new HashMap();
+    	tmp.put("one", "aaa");
+    	tmp.put("two", "bbb");
+    	tmp.put("three", "ccc");
+    	request.setParameterMap(tmp);
+
+    	tag.setValue("TestAction.acton");
+
+    	tag.doStartTag();
+
+    	URL url = (URL) tag.getComponent();
+    	Map parameters = url.getParameters();
+
+    	tag.doEndTag();
+
+    	assertEquals(parameters.get("one"), "oneVal");
+    	assertEquals(parameters.get("two"), "twoVal");
+    	assertEquals(parameters.get("three"), "threeVal");
+    }
+
 
     public void testActionURL() throws Exception {
         tag.setValue("TestAction.action");
Index: src/test/com/opensymphony/webwork/views/util/UrlHelperTest.java
===================================================================
RCS file: /cvs/webwork/src/test/com/opensymphony/webwork/views/util/UrlHelperTest.java,v
retrieving revision 1.18
diff -u -r1.18 UrlHelperTest.java
--- src/test/com/opensymphony/webwork/views/util/UrlHelperTest.java	8 Mar 2006 18:09:28 -0000	1.18
+++ src/test/com/opensymphony/webwork/views/util/UrlHelperTest.java	27 May 2006 23:56:26 -0000
@@ -42,7 +42,8 @@
 		
 		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 {
 		String expectedUrl = "/contextPath/path1/path2/myAction.action";
@@ -259,5 +260,41 @@
 
         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 {
+    	Object defaultI18nEncoding = Configuration.get(WebWorkConstants.WEBWORK_I18N_ENCODING);
+    	try {
+    		Configuration.set(WebWorkConstants.WEBWORK_I18N_ENCODING, "UTF-8");
+    		String result = UrlHelper.translateAndEncode("\u65b0\u805e");
+    		String expectedResult = "%E6%96%B0%E8%81%9E";
+
+    		assertEquals(result, expectedResult);
+    	}
+    	finally {
+    		Configuration.set(WebWorkConstants.WEBWORK_I18N_ENCODING, defaultI18nEncoding);
+    	}
+    }
+
+    public void testTranslateAndDecode() throws Exception {
+    	Object defaultI18nEncoding = Configuration.get(WebWorkConstants.WEBWORK_I18N_ENCODING);
+    	try {
+    		Configuration.set(WebWorkConstants.WEBWORK_I18N_ENCODING, "UTF-8");
+    		String result = UrlHelper.translateAndDecode("%E6%96%B0%E8%81%9E");
+    		String expectedResult = "\u65b0\u805e";
+
+    		assertEquals(result, expectedResult);
+    	}
+    	finally {
+    		Configuration.set(WebWorkConstants.WEBWORK_I18N_ENCODING, defaultI18nEncoding);
+    	}
     }
 }
