Author: nilsga Date: Fri Nov 21 13:09:13 2008 New Revision: 719714 URL: http://svn.apache.org/viewvc?rev=719714&view=rev Log: WW-2846 Nested params should now work properly in portlets
Modified: struts/struts2/trunk/plugins/portlet/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java Modified: struts/struts2/trunk/plugins/portlet/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/portlet/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java?rev=719714&r1=719713&r2=719714&view=diff ============================================================================== --- struts/struts2/trunk/plugins/portlet/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java (original) +++ struts/struts2/trunk/plugins/portlet/src/main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java Fri Nov 21 13:09:13 2008 @@ -35,6 +35,7 @@ import javax.portlet.RenderResponse; import javax.portlet.WindowState; +import org.apache.commons.collections.iterators.EntrySetMapIterator; import org.apache.struts2.StrutsException; import org.apache.struts2.portlet.PortletActionConstants; import org.apache.struts2.portlet.context.PortletActionContext; @@ -196,7 +197,7 @@ * @param value * @return encoded url to non Struts action resources. */ - public static String buildResourceUrl(String value, Map params) { + public static String buildResourceUrl(String value, Map<String, Object> params) { StringBuffer sb = new StringBuffer(); // Relative URLs are not allowed in a portlet if (!value.startsWith("/")) { @@ -205,14 +206,13 @@ sb.append(value); if(params != null && params.size() > 0) { sb.append("?"); - Iterator it = params.keySet().iterator(); + Iterator<Map.Entry<String, Object>> it = params.entrySet().iterator(); try { while(it.hasNext()) { - String key = (String)it.next(); - String val = (String)params.get(key); + Map.Entry<String, Object> entry = it.next(); - sb.append(URLEncoder.encode(key, ENCODING)).append("="); - sb.append(URLEncoder.encode(val, ENCODING)); + sb.append(URLEncoder.encode(entry.getKey(), ENCODING)).append("="); + sb.append(URLEncoder.encode(entry.getValue().toString(), ENCODING)); if(it.hasNext()) { sb.append("&"); } @@ -233,18 +233,18 @@ * @param params The parameters to the URL. * @return A Map with all parameters as String arrays. */ - public static Map ensureParamsAreStringArrays(Map params) { - Map result = null; + public static Map ensureParamsAreStringArrays(Map<String, Object> params) { + Map<String, String[]> result = null; if (params != null) { - result = new LinkedHashMap(params.size()); - Iterator it = params.keySet().iterator(); + result = new LinkedHashMap<String, String[]>(params.size()); + Iterator<Map.Entry<String, Object>> it = params.entrySet().iterator(); while (it.hasNext()) { - Object key = it.next(); - Object val = params.get(key); + Map.Entry<String, Object> entry = it.next(); + Object val = entry.getValue(); if (val instanceof String[]) { - result.put(key, val); + result.put(entry.getKey(), (String[])val); } else { - result.put(key, new String[] { val.toString() }); + result.put(entry.getKey(), new String[] { val.toString() }); } } } Modified: struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java?rev=719714&r1=719713&r2=719714&view=diff ============================================================================== --- struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java (original) +++ struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java Fri Nov 21 13:09:13 2008 @@ -237,6 +237,49 @@ tag.doEndTag(); jspWriter.verify(); } + + public void testResourceUrlWithNestedParamThatIsNotString() throws Exception { + renderRequest.setContextPath("/myPortlet"); + jspWriter.setExpectedData("/myPortlet/image.gif?id=5"); + + ParamTag paramTag = new ParamTag(); + paramTag.setPageContext(pageContext); + paramTag.setParent(tag); + paramTag.setName("id"); + paramTag.setValue("5"); + + tag.setValue("image.gif"); + tag.doStartTag(); + paramTag.doStartTag(); + paramTag.doEndTag(); + tag.doEndTag(); + jspWriter.verify(); + } + + public void testResourceUrlWithNestedOgnlExpressionParamThatIsNotString() throws Exception { + renderRequest.setContextPath("/myPortlet"); + jspWriter.setExpectedData("/myPortlet/image.gif?id=5"); + + Object o = new Object() { + public Integer getId() { + return 5; + } + }; + tag.getStack().push(o); + + ParamTag paramTag = new ParamTag(); + paramTag.setPageContext(pageContext); + paramTag.setParent(tag); + paramTag.setName("id"); + paramTag.setValue("id"); + + tag.setValue("image.gif"); + tag.doStartTag(); + paramTag.doStartTag(); + paramTag.doEndTag(); + tag.doEndTag(); + jspWriter.verify(); + } public void testUrlWithMethod() throws Exception { tag.setAction("testAction");