Better handle image submit buttons

WW-1532


git-svn-id: https://svn.apache.org/repos/asf/struts/struts2/trunk@481173 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Donald J. Brown
2006-12-01 07:16:50 +00:00
parent 3e29ef620d
commit 9aa50d2de8
2 changed files with 49 additions and 5 deletions
@@ -22,9 +22,11 @@ package org.apache.struts2.dispatcher.mapper;
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 class DefaultActionMapper implements ActionMapper {
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;
}
}
}
}
@@ -239,6 +239,37 @@ public class DefaultActionMapperTest extends StrutsTestCase {
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();