You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by mr...@apache.org on 2007/09/08 11:16:43 UTC

svn commit: r573805 - in /struts/struts2/trunk/core/src: main/java/org/apache/struts2/dispatcher/ main/java/org/apache/struts2/dispatcher/mapper/ test/java/org/apache/struts2/dispatcher/mapper/

Author: mrdon
Date: Sat Sep  8 02:16:43 2007
New Revision: 573805

URL: http://svn.apache.org/viewvc?rev=573805&view=rev
Log:
Fix handling of empty extension during url creation
WW-2163

Modified:
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/StrutsResultSupport.java
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/StrutsResultSupport.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/StrutsResultSupport.java?rev=573805&r1=573804&r2=573805&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/StrutsResultSupport.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/StrutsResultSupport.java Sat Sep  8 02:16:43 2007
@@ -137,6 +137,13 @@
     public void setLocation(String location) {
         this.location = location;
     }
+    
+    /**
+     * Gets the location it was created with, mainly for testing
+     */
+    public String getLocation() {
+        return location;
+    }
 
     /**
      * Returns the last parsed and encoded location value

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java?rev=573805&r1=573804&r2=573805&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java Sat Sep  8 02:16:43 2007
@@ -228,7 +228,7 @@
                         ServletRedirectResult redirect = new ServletRedirectResult();
                         container.inject(redirect);
                         String extension = getDefaultExtension();
-                        if (extension != null) {
+                        if (extension != null && extension.length() > 0) {
                             location += "." + extension;
                         }
                         redirect.setLocation(location);
@@ -499,8 +499,11 @@
 
         String extension = getDefaultExtension();
         if (extension != null) {
-            if (uri.indexOf('.' + extension) == -1) {
-                uri.append(".").append(extension);
+            
+            if (extension.length() == 0 || (extension.length() > 0 && uri.indexOf('.' + extension) == -1)) {
+                if (extension.length() > 0) {
+                    uri.append(".").append(extension);
+                }
                 if (params.length() > 0) {
                     uri.append(params);
                 }

Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java?rev=573805&r1=573804&r2=573805&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java (original)
+++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java Sat Sep  8 02:16:43 2007
@@ -27,6 +27,7 @@
 import org.apache.struts2.StrutsTestCase;
 import org.apache.struts2.ServletActionContext;
 import org.apache.struts2.dispatcher.ServletRedirectResult;
+import org.apache.struts2.dispatcher.StrutsResultSupport;
 import org.apache.struts2.views.jsp.StrutsMockHttpServletRequest;
 import org.apache.struts2.views.jsp.StrutsMockHttpServletResponse;
 
@@ -376,9 +377,34 @@
         ActionMapping actionMapping = defaultActionMapper.getMapping(request, configManager);
         
 
-        Result result = actionMapping.getResult();
+        StrutsResultSupport result = (StrutsResultSupport) actionMapping.getResult();
         assertNotNull(result);
         assertTrue(result instanceof ServletRedirectResult);
+        
+        assertEquals("myAction.action", result.getLocation());
+
+        // TODO: need to test location but there's noaccess to the property/method, unless we use reflection
+    }
+    
+    public void testRedirectActionPrefixWithEmptyExtension() throws Exception {
+        Map parameterMap = new HashMap();
+        parameterMap.put(DefaultActionMapper.REDIRECT_ACTION_PREFIX + "myAction", "");
+
+        StrutsMockHttpServletRequest request = new StrutsMockHttpServletRequest();
+        request.setupGetServletPath("/someServletPath");
+        request.setParameterMap(parameterMap);
+
+        DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
+        defaultActionMapper.setContainer(container);
+        defaultActionMapper.setExtensions(",,");
+        ActionMapping actionMapping = defaultActionMapper.getMapping(request, configManager);
+        
+
+        StrutsResultSupport result = (StrutsResultSupport) actionMapping.getResult();
+        assertNotNull(result);
+        assertTrue(result instanceof ServletRedirectResult);
+        
+        assertEquals("myAction", result.getLocation());
 
         // TODO: need to test location but there's noaccess to the property/method, unless we use reflection
     }
@@ -550,6 +576,18 @@
         String uri = mapper.getUriFromActionMapping(actionMapping);
 
         assertEquals("/myActionName.action", uri);
+    }
+    
+    public void testGetUriFromActionMapperWhenBlankExtension() throws Exception {
+        DefaultActionMapper mapper = new DefaultActionMapper();
+        mapper.setExtensions(",,");
+        ActionMapping actionMapping = new ActionMapping();
+        actionMapping.setMethod("myMethod");
+        actionMapping.setName("myActionName");
+        actionMapping.setNamespace("/myNamespace");
+        String uri = mapper.getUriFromActionMapping(actionMapping);
+
+        assertEquals("/myNamespace/myActionName!myMethod", uri);
     }
 
 }