You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by ni...@apache.org on 2008/11/21 22:09:13 UTC

svn commit: r719714 - in /struts/struts2/trunk/plugins/portlet/src: main/java/org/apache/struts2/portlet/util/PortletUrlHelper.java test/java/org/apache/struts2/views/jsp/PortletUrlTagTest.java

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");