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 2006/12/01 08:16:51 UTC

svn commit: r481173 - in /struts/struts2/trunk/core/src: main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java

Author: mrdon
Date: Thu Nov 30 23:16:50 2006
New Revision: 481173

URL: http://svn.apache.org/viewvc?view=rev&rev=481173
Log:
Better handle image submit buttons
WW-1532

Modified:
    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/mapper/DefaultActionMapper.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java?view=diff&rev=481173&r1=481172&r2=481173
==============================================================================
--- 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 Thu Nov 30 23:16:50 2006
@@ -22,9 +22,11 @@
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import javax.servlet.http.HttpServletRequest;
 
@@ -285,15 +287,26 @@
     public void handleSpecialParameters(HttpServletRequest request,
             ActionMapping mapping) {
         // handle special parameter prefixes.
+        Set<String> uniqueParameters = new HashSet<String>();
         Map parameterMap = request.getParameterMap();
         for (Iterator iterator = parameterMap.keySet().iterator(); iterator
                 .hasNext();) {
             String key = (String) iterator.next();
-            ParameterAction parameterAction = (ParameterAction) prefixTrie
-                    .get(key);
-            if (parameterAction != null) {
-                parameterAction.execute(key, mapping);
-                break;
+            
+            // Strip off the image button location info, if found
+            if (key.endsWith(".x") || key.endsWith(".y")) {
+                key = key.substring(0, key.length() - 2);
+            }
+            
+            // Ensure a parameter doesn't get processed twice
+            if (!uniqueParameters.contains(key)) {
+                ParameterAction parameterAction = (ParameterAction) prefixTrie
+                        .get(key);
+                if (parameterAction != null) {
+                    parameterAction.execute(key, mapping);
+                    uniqueParameters.add(key);
+                    break;
+                }
             }
         }
     }

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?view=diff&rev=481173&r1=481172&r2=481173
==============================================================================
--- 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 Thu Nov 30 23:16:50 2006
@@ -239,6 +239,37 @@
 
         assertEquals(actionMapping.getName(), "myAction");
     }
+    
+    public void testActionPrefix_fromImageButton() throws Exception {
+        Map parameterMap = new HashMap();
+        parameterMap.put(DefaultActionMapper.ACTION_PREFIX + "myAction", "");
+        parameterMap.put(DefaultActionMapper.ACTION_PREFIX + "myAction.x", "");
+        parameterMap.put(DefaultActionMapper.ACTION_PREFIX + "myAction.y", "");
+
+        StrutsMockHttpServletRequest request = new StrutsMockHttpServletRequest();
+        request.setParameterMap(parameterMap);
+        request.setupGetServletPath("/someServletPath.action");
+
+        DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
+        ActionMapping actionMapping = defaultActionMapper.getMapping(request, configManager);
+
+        assertEquals(actionMapping.getName(), "myAction");
+    }
+    
+    public void testActionPrefix_fromIEImageButton() throws Exception {
+        Map parameterMap = new HashMap();
+        parameterMap.put(DefaultActionMapper.ACTION_PREFIX + "myAction.x", "");
+        parameterMap.put(DefaultActionMapper.ACTION_PREFIX + "myAction.y", "");
+
+        StrutsMockHttpServletRequest request = new StrutsMockHttpServletRequest();
+        request.setParameterMap(parameterMap);
+        request.setupGetServletPath("/someServletPath.action");
+
+        DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
+        ActionMapping actionMapping = defaultActionMapper.getMapping(request, configManager);
+
+        assertEquals(actionMapping.getName(), "myAction");
+    }
 
     public void testRedirectPrefix() throws Exception {
         Map parameterMap = new HashMap();