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