struts-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Knut Erik Borgen (JIRA)" <j...@apache.org>
Subject [jira] Commented: (WW-1624) URL tag should support not escaping ampersand
Date Fri, 01 Jun 2007 12:10:26 GMT

    [ https://issues.apache.org/struts/browse/WW-1624?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_41160
] 

Knut Erik Borgen commented on WW-1624:
--------------------------------------

As this was solved in Webworks I have ported it from webworks to struts + included a unittest.
Here is the diff:

$ svn diff
Index: core/src/test/java/org/apache/struts2/views/jsp/URLTagTest.java
===================================================================
--- core/src/test/java/org/apache/struts2/views/jsp/URLTagTest.java     (revision 543088)
+++ core/src/test/java/org/apache/struts2/views/jsp/URLTagTest.java     (working copy)
@@ -23,6 +23,7 @@
 import java.util.HashMap;
 import java.util.Map;

+import javax.servlet.jsp.JspException;
 import javax.servlet.jsp.JspWriter;

 import org.apache.struts2.components.URL;
@@ -185,7 +186,7 @@

         // request parameter map should not have any effect, as includeParams
         // default to GET, which get its param from request.getQueryString()
-        Map tmp = new HashMap();
+        Map<String,String> tmp = new HashMap<String,String>();
         tmp.put("one", "aaa");
         tmp.put("two", "bbb");
         tmp.put("three", "ccc");
@@ -348,6 +349,19 @@
         assertEquals("/team.action?section=team&amp;company=acme+inc", writer.toString());
     }

+    public void testRequestURIActionIncludeGetDoNotQuoteAmp() throws JspException {
+        request.setRequestURI("/public/about");
+        request.setQueryString("section=team&company=acme inc");
+
+        tag.setAction("team");
+        tag.setIncludeParams("get");
+        tag.setEscapeAmp("false");
+        tag.doStartTag();
+        tag.doEndTag();
+
+        assertEquals("/team.action?section=team&company=acme+inc", writer.toString());
+    }
+
     public void testRequestURINoActionIncludeNone() throws Exception {
         request.setRequestURI("/public/about");
         request.setQueryString("section=team&company=acme inc");
Index: core/src/main/java/org/apache/struts2/components/Component.java
===================================================================
--- core/src/main/java/org/apache/struts2/components/Component.java     (revision 543088)
+++ core/src/main/java/org/apache/struts2/components/Component.java     (working copy)
@@ -334,16 +334,17 @@
      * @param scheme      http or https
      * @param includeContext  should the context path be included or not
      * @param encodeResult    should the url be encoded
+     * @param escapeXml If true, it will escape &amp;.
      * @return the action url.
      */
     protected String determineActionURL(String action, String namespace, String method,
                                         HttpServletRequest req, HttpServletResponse res,
Map parameters, String scheme,

-                                        boolean includeContext, boolean encodeResult) {
+                                        boolean includeContext, boolean encodeResult, boolean
escapeXml) {
         String finalAction = findString(action);
         String finalNamespace = determineNamespace(namespace, getStack(), req);
         ActionMapping mapping = new ActionMapping(finalAction, finalNamespace, method, parameters);
         String uri = actionMapper.getUriFromActionMapping(mapping);
-        return UrlHelper.buildUrl(uri, req, res, parameters, scheme, includeContext, encodeResult);
+        return UrlHelper.buildUrl(uri, req, res, parameters, scheme, includeContext, encodeResult,
false, escapeXml);
     }

     /**
Index: core/src/main/java/org/apache/struts2/components/URL.java
===================================================================
--- core/src/main/java/org/apache/struts2/components/URL.java   (revision 543088)
+++ core/src/main/java/org/apache/struts2/components/URL.java   (working copy)
@@ -141,7 +141,8 @@
     protected String anchor;
     protected String urlIncludeParams;
     protected ExtraParameterProvider extraParameterProvider;
-
+    protected boolean escapeAmp = true;
+
     public URL(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
         super(stack);
         this.req = req;
@@ -240,7 +241,7 @@
                 result = PortletUrlHelper.buildUrl(action, namespace, parameters, portletUrlType,
portletMode, windowSt
ate);
             }
             else {
-                result = determineActionURL(action, namespace, method, req, res, parameters,
scheme, includeContext, en
code);
+                result = determineActionURL(action, namespace, method, req, res, parameters,
scheme, includeContext, en
code, escapeAmp);
             }
         } else {
             if(Dispatcher.getInstance().isPortletSupportActive() && PortletActionContext.isPortletRequest())
{
@@ -337,8 +338,12 @@
     public void setAnchor(String anchor) {
         this.anchor = anchor;
     }
+
+    @StrutsTagAttribute(description="Whether to escape ampersand (&) to (&amp;) or
not, default to true.")
+    public void setEscapeAmp(boolean escapeAmp) {
+       this.escapeAmp = escapeAmp;
+    }

-
     /**
      * Merge request parameters into current parameters. If a parameter is
      * already present, than the request parameter in the current request and value atrribute
Index: core/src/main/java/org/apache/struts2/views/jsp/URLTag.java
===================================================================
--- core/src/main/java/org/apache/struts2/views/jsp/URLTag.java (revision 543088)
+++ core/src/main/java/org/apache/struts2/views/jsp/URLTag.java (working copy)
@@ -48,6 +48,7 @@
     protected String windowState;
     protected String portletUrlType;
     protected String anchor;
+    protected String escapeAmp;

     public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse
res) {
         return new URL(stack, req, res);
@@ -74,6 +75,9 @@
         if (includeContext != null) {
             url.setIncludeContext(Boolean.valueOf(includeContext).booleanValue());
         }
+        if (escapeAmp != null) {
+               url.setEscapeAmp(Boolean.valueOf(escapeAmp).booleanValue());
+        }
     }

     public void setEncode(String encode) {
@@ -120,4 +124,8 @@
     public void setAnchor(String anchor) {
         this.anchor = anchor;
     }
+
+    public void setEscapeAmp(String escapeAmp) {
+       this.escapeAmp = escapeAmp;
+    }
 }
Index: core/src/main/java/org/apache/struts2/views/util/UrlHelper.java
===================================================================
--- core/src/main/java/org/apache/struts2/views/util/UrlHelper.java     (revision 543088)
+++ core/src/main/java/org/apache/struts2/views/util/UrlHelper.java     (working copy)
@@ -91,6 +91,10 @@
     }

     public static String buildUrl(String action, HttpServletRequest request, HttpServletResponse
response, Map params,
String scheme, boolean includeContext, boolean encodeResult, boolean forceAddSchemeHostAndPort)
{
+       return buildUrl(action, request, response, params, scheme, includeContext, encodeResult,
forceAddSchemeHostAndPo
rt, true);
+    }
+
+    public static String buildUrl(String action, HttpServletRequest request, HttpServletResponse
response, Map params,
String scheme, boolean includeContext, boolean encodeResult, boolean forceAddSchemeHostAndPort,
boolean escapeAmp) {
         StringBuffer link = new StringBuffer();

         boolean changedScheme = false;
@@ -169,7 +173,12 @@
         }

         //if the action was not explicitly set grab the params from the request
-        buildParametersString(params, link);
+        if (escapeAmp) {
+               buildParametersString(params, link);
+        }
+        else {
+               buildParametersString(params, link, "&");
+        }

         String result;






> URL tag should support not escaping ampersand
> ---------------------------------------------
>
>                 Key: WW-1624
>                 URL: https://issues.apache.org/struts/browse/WW-1624
>             Project: Struts 2
>          Issue Type: Improvement
>          Components: Views
>            Reporter: Philip Luppens
>            Priority: Minor
>             Fix For: 2.1.0
>
>
> See: http://jira.opensymphony.com/browse/WW-1403
> URL tag should support not escaping ampersand as discussed at [1]
> [1] - http://forums.opensymphony.com/thread.jspa?threadID=46866&tstart=0 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message