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


Reply via email to