Author: nilsga Date: Fri Aug 24 02:12:20 2007 New Revision: 569304 URL: http://svn.apache.org/viewvc?rev=569304&view=rev Log: WW-1713 Backport to 2.0.x
Modified: struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/components/Form.java struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/components/URL.java struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java struts/struts2/branches/STRUTS_2_0_X/core/src/test/java/org/apache/struts2/portlet/util/PortletUrlHelperTest.java Modified: struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/components/Form.java URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/components/Form.java?rev=569304&r1=569303&r2=569304&view=diff ============================================================================== --- struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/components/Form.java (original) +++ struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/components/Form.java Fri Aug 24 02:12:20 2007 @@ -382,7 +382,7 @@ } } if (action != null) { - String result = PortletUrlHelper.buildUrl(action, namespace, + String result = PortletUrlHelper.buildUrl(action, namespace, null, getParameters(), type, portletMode, windowState); addParameter("action", result); Modified: struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/components/URL.java URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/components/URL.java?rev=569304&r1=569303&r2=569304&view=diff ============================================================================== --- struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/components/URL.java (original) +++ struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/components/URL.java Fri Aug 24 02:12:20 2007 @@ -250,7 +250,7 @@ String result; if (value == null && action != null) { if (Dispatcher.getInstance().isPortletSupportActive() && PortletActionContext.isPortletRequest()) { - result = PortletUrlHelper.buildUrl(action, namespace, parameters, portletUrlType, portletMode, windowState); + result = PortletUrlHelper.buildUrl(action, namespace, method, parameters, portletUrlType, portletMode, windowState); } else { result = determineActionURL(action, namespace, method, req, res, parameters, scheme, includeContext, encode, forceAddSchemeHostAndPort, escapeAmp); Modified: struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java?rev=569304&r1=569303&r2=569304&view=diff ============================================================================== --- struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java (original) +++ struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java Fri Aug 24 02:12:20 2007 @@ -22,8 +22,8 @@ import java.io.UnsupportedEncodingException; import java.net.URLEncoder; -import java.util.HashMap; import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.Map; import java.util.StringTokenizer; @@ -59,15 +59,16 @@ * * @param action The action the URL should invoke. * @param namespace The namespace of the action to invoke. + * @param method The method of the action to invoke. * @param params The parameters of the URL. * @param type The type of the url, either <tt>action</tt> or <tt>render</tt> * @param mode The PortletMode of the URL. * @param state The WindowState of the URL. * @return The URL String. */ - public static String buildUrl(String action, String namespace, Map params, + public static String buildUrl(String action, String namespace, String method, Map params, String type, String mode, String state) { - return buildUrl(action, namespace, params, null, type, mode, state, + return buildUrl(action, namespace, method, params, null, type, mode, state, true, true); } @@ -76,9 +77,10 @@ * * @see #buildUrl(String, String, Map, String, String, String) */ - public static String buildUrl(String action, String namespace, Map params, + public static String buildUrl(String action, String namespace, String method, Map params, String scheme, String type, String portletMode, String windowState, boolean includeContext, boolean encodeResult) { + StringBuffer resultingAction = new StringBuffer(); RenderRequest request = PortletActionContext.getRenderRequest(); RenderResponse response = PortletActionContext.getRenderResponse(); LOG.debug("Creating url. Action = " + action + ", Namespace = " @@ -102,15 +104,17 @@ } } if (TextUtils.stringSet(namespace)) { - StringBuffer sb = new StringBuffer(); - sb.append(namespace); + resultingAction.append(namespace); if(!action.startsWith("/") && !namespace.endsWith("/")) { - sb.append("/"); + resultingAction.append("/"); } - action = sb.append(action).toString(); + resultingAction.append(action); LOG.debug("Resulting actionPath: " + action); } - params.put(PortletActionConstants.ACTION_PARAM, new String[] { action }); + if(TextUtils.stringSet(method)) { + resultingAction.append("!").append(method); + } + params.put(PortletActionConstants.ACTION_PARAM, new String[] { resultingAction.toString() }); PortletURL url = null; if ("action".equalsIgnoreCase(type)) { @@ -230,7 +234,7 @@ public static Map ensureParamsAreStringArrays(Map params) { Map result = null; if (params != null) { - result = new HashMap(params.size()); + result = new LinkedHashMap(params.size()); Iterator it = params.keySet().iterator(); while (it.hasNext()) { Object key = it.next(); Modified: struts/struts2/branches/STRUTS_2_0_X/core/src/test/java/org/apache/struts2/portlet/util/PortletUrlHelperTest.java URL: http://svn.apache.org/viewvc/struts/struts2/branches/STRUTS_2_0_X/core/src/test/java/org/apache/struts2/portlet/util/PortletUrlHelperTest.java?rev=569304&r1=569303&r2=569304&view=diff ============================================================================== --- struts/struts2/branches/STRUTS_2_0_X/core/src/test/java/org/apache/struts2/portlet/util/PortletUrlHelperTest.java (original) +++ struts/struts2/branches/STRUTS_2_0_X/core/src/test/java/org/apache/struts2/portlet/util/PortletUrlHelperTest.java Fri Aug 24 02:12:20 2007 @@ -95,7 +95,7 @@ renderRequestControl.replay(); renderResponseControl.replay(); portletUrlControl.replay(); - PortletUrlHelper.buildUrl("testAction", null, + PortletUrlHelper.buildUrl("testAction", null, null, new HashMap(), null, null, null); portletUrlControl.verify(); renderRequestControl.verify(); @@ -113,7 +113,7 @@ renderRequestControl.replay(); renderResponseControl.replay(); portletUrlControl.replay(); - PortletUrlHelper.buildUrl("testAction", null, + PortletUrlHelper.buildUrl("testAction", null, null, new HashMap(), null, "edit", null); portletUrlControl.verify(); renderRequestControl.verify(); @@ -131,7 +131,7 @@ renderRequestControl.replay(); renderResponseControl.replay(); portletUrlControl.replay(); - PortletUrlHelper.buildUrl("testAction", null, + PortletUrlHelper.buildUrl("testAction", null, null, new HashMap(), null, null, "maximized"); portletUrlControl.verify(); renderRequestControl.verify(); @@ -149,7 +149,7 @@ renderRequestControl.replay(); renderResponseControl.replay(); portletUrlControl.replay(); - PortletUrlHelper.buildUrl("testAction", null, + PortletUrlHelper.buildUrl("testAction", null, null, new HashMap(), "action", null, null); portletUrlControl.verify(); renderRequestControl.verify();