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