craigmcc    2002/10/12 18:59:32

  Modified:    src/share/org/apache/struts/util RequestUtils.java
               src/test/org/apache/struts/util TestRequestUtils.java
  Log:
  Enhance computeURL() to use "&" as the connector between parameters
  on a forward URL (but not a redirect URL).
  
  PR: Bugzilla #13458
    Bug report submitted by Matt Raible <matt at raibledesigns.com>
    Patch submitted by Antoni Reuss <areus at ibit.org>
  
  Revision  Changes    Path
  1.59      +14 -8     
jakarta-struts/src/share/org/apache/struts/util/RequestUtils.java
  
  Index: RequestUtils.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-struts/src/share/org/apache/struts/util/RequestUtils.java,v
  retrieving revision 1.58
  retrieving revision 1.59
  diff -u -r1.58 -r1.59
  --- RequestUtils.java 13 Oct 2002 01:33:38 -0000      1.58
  +++ RequestUtils.java 13 Oct 2002 01:59:31 -0000      1.59
  @@ -448,6 +448,12 @@
                   anchor = null;
               }
   
  +            // Define the parameter separator
  +            String separator = "&amp;";
  +            if (redirect) {
  +                separator = "&";
  +            }
  +
               // Add the required request parameters
               boolean question = temp.indexOf('?') >= 0;
               Iterator keys = params.keySet().iterator();
  @@ -459,7 +465,7 @@
                           url.append('?');
                           question = true;
                       } else {
  -                        url.append("&");
  +                        url.append(separator);
                       }
                       url.append(URLEncoder.encode(key));
                       url.append('='); // Interpret null as "no value"
  @@ -468,7 +474,7 @@
                           url.append('?');
                           question = true;
                       } else {
  -                        url.append("&");
  +                        url.append(separator);
                       }
                       url.append(URLEncoder.encode(key));
                       url.append('=');
  @@ -480,7 +486,7 @@
                               url.append('?');
                               question = true;
                           } else {
  -                            url.append("&");
  +                            url.append(separator);
                           }
                           url.append(URLEncoder.encode(key));
                           url.append('=');
  @@ -491,7 +497,7 @@
                           url.append('?');
                           question = true;
                       } else {
  -                        url.append("&");
  +                        url.append(separator);
                       }
                       url.append(URLEncoder.encode(key));
                       url.append('=');
  
  
  
  1.11      +80 -11    
jakarta-struts/src/test/org/apache/struts/util/TestRequestUtils.java
  
  Index: TestRequestUtils.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-struts/src/test/org/apache/struts/util/TestRequestUtils.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- TestRequestUtils.java     27 Jul 2002 23:26:09 -0000      1.10
  +++ TestRequestUtils.java     13 Oct 2002 01:59:32 -0000      1.11
  @@ -831,7 +831,7 @@
       }
   
   
  -    // Add parameters only
  +    // Add parameters only -- forward URL
       public void testComputeURL3a() {
   
           request.setPathElements("/myapp", "/action.do", null, null);
  @@ -849,13 +849,13 @@
           }
           assertNotNull("url present", url);
           assertTrue("url value",
  -                   url.equals("/myapp/bar?foo1=bar1&foo2=bar2") ||
  -                   url.equals("/myapp/bar?foo2=bar2&foo1=bar1"));
  +                   url.equals("/myapp/bar?foo1=bar1&amp;foo2=bar2") ||
  +                   url.equals("/myapp/bar?foo2=bar2&amp;foo1=bar1"));
   
       }
   
   
  -    // Add anchor only
  +    // Add anchor only -- forward URL
       public void testComputeURL3b() {
   
           request.setPathElements("/myapp", "/action.do", null, null);
  @@ -876,7 +876,7 @@
       }
   
   
  -    // Add parameters + anchor
  +    // Add parameters + anchor -- forward URL
       public void testComputeURL3c() {
   
           request.setPathElements("/myapp", "/action.do", null, null);
  @@ -894,8 +894,77 @@
           }
           assertNotNull("url present", url);
           assertTrue("url value",
  -                   url.equals("/myapp/bar?foo1=bar1&foo2=bar2#anchor") ||
  -                   url.equals("/myapp/bar?foo2=bar2&foo1=bar1#anchor"));
  +                   url.equals("/myapp/bar?foo1=bar1&amp;foo2=bar2#anchor") ||
  +                   url.equals("/myapp/bar?foo2=bar2&amp;foo1=bar1#anchor"));
  +
  +    }
  +
  +
  +    // Add parameters only -- redirect URL
  +    public void testComputeURL3d() {
  +
  +        request.setPathElements("/myapp", "/action.do", null, null);
  +        Map map = new HashMap();
  +        map.put("foo1", "bar1");
  +        map.put("foo2", "bar2");
  +        String url = null;
  +        try {
  +            url = RequestUtils.computeURL
  +                (page, null,
  +                 null, "/bar",
  +                 map, null, true);
  +        } catch (MalformedURLException e) {
  +            fail("MalformedURLException: " + e);
  +        }
  +        assertNotNull("url present", url);
  +        assertTrue("url value",
  +                   url.equals("/myapp/bar?foo1=bar1&foo2=bar2") ||
  +                   url.equals("/myapp/bar?foo2=bar2&foo1=bar1"));
  +
  +    }
  +
  +
  +    // Add anchor only -- redirect URL
  +    public void testComputeURL3e() {
  +
  +        request.setPathElements("/myapp", "/action.do", null, null);
  +        String url = null;
  +        try {
  +            url = RequestUtils.computeURL
  +                (page, null,
  +                 null, "/bar",
  +                 null, "anchor", true);
  +        } catch (MalformedURLException e) {
  +            fail("MalformedURLException: " + e);
  +        }
  +        assertNotNull("url present", url);
  +        assertEquals("url value",
  +                     "/myapp/bar#anchor",
  +                     url);
  +
  +    }
  +
  +
  +    // Add parameters + anchor -- redirect URL
  +    public void testComputeURL3f() {
  +
  +        request.setPathElements("/myapp", "/action.do", null, null);
  +        Map map = new HashMap();
  +        map.put("foo1", "bar1");
  +        map.put("foo2", "bar2");
  +        String url = null;
  +        try {
  +            url = RequestUtils.computeURL
  +                (page, null,
  +                 null, "/bar",
  +                 map, "anchor", false);
  +        } catch (MalformedURLException e) {
  +            fail("MalformedURLException: " + e);
  +        }
  +        assertNotNull("url present", url);
  +        assertTrue("url value",
  +                   url.equals("/myapp/bar?foo1=bar1&amp;foo2=bar2#anchor") ||
  +                   url.equals("/myapp/bar?foo2=bar2&amp;foo1=bar1#anchor"));
   
       }
   
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to