Author: rgielen
Date: Mon Jul 15 08:02:23 2013
New Revision: 1503127
URL: http://svn.apache.org/r1503127
Log:
Merged from STRUTS_2_3_15_X
WW-4140
- Lukasz' patch applied [from revision 1502979]
Modified:
struts/struts2/trunk/ (props changed)
struts/struts2/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionPrefix/actionPrefixExample.ftl
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
Propchange: struts/struts2/trunk/
------------------------------------------------------------------------------
Merged /struts/struts2/branches/STRUTS_2_3_15_X:r1502979
Modified:
struts/struts2/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionPrefix/actionPrefixExample.ftl
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionPrefix/actionPrefixExample.ftl?rev=1503127&r1=1503126&r2=1503127&view=diff
==============================================================================
---
struts/struts2/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionPrefix/actionPrefixExample.ftl
(original)
+++
struts/struts2/trunk/apps/showcase/src/main/webapp/tags/non-ui/actionPrefix/actionPrefixExample.ftl
Mon Jul 15 08:02:23 2013
@@ -37,17 +37,13 @@
<@s.textfield label="Enter Some Text"
name="text" />
- <@s.submit name="action:actionPrefix"
value="%{'action prefix'}" cssClass="btn" />
+ <@s.submit action="actionPrefix"
value="%{'action prefix'}" cssClass="btn" />
- <@s.submit name="method:alternateMethod"
value="%{'method prefix'}" cssClass="btn" />
-
- <@s.submit
name="redirect:http://www.google.com" value="%{'redirect prefix'}"
cssClass="btn" />
-
- <@s.submit
name="redirect-action:redirectActionPrefix" value="%{'redirect-action prefix'}"
cssClass="btn" />
+ <@s.submit method="alternateMethod"
value="%{'method prefix'}" cssClass="btn" />
<@s.submit value="Normal Submit" cssClass="btn"
/>
- <@s.submit name="action:redirectActionPrefixAction"
value="%{'redirect-action without prefix'}" cssClass="btn" />
+ <@s.submit action="redirectActionPrefixAction"
value="%{'redirectAction without prefix'}" cssClass="btn" />
</@s.form>
</div>
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=1503127&r1=1503126&r2=1503127&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
Mon Jul 15 08:02:23 2013
@@ -33,11 +33,15 @@ import org.apache.commons.lang3.StringUt
import org.apache.struts2.RequestUtils;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.StrutsConstants;
-import org.apache.struts2.dispatcher.ServletRedirectResult;
import org.apache.struts2.util.PrefixTrie;
import javax.servlet.http.HttpServletRequest;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
import java.util.regex.Pattern;
/**
@@ -164,8 +168,6 @@ public class DefaultActionMapper impleme
protected static final String METHOD_PREFIX = "method:";
protected static final String ACTION_PREFIX = "action:";
- protected static final String REDIRECT_PREFIX = "redirect:";
- protected static final String REDIRECT_ACTION_PREFIX = "redirectAction:";
protected boolean allowDynamicMethodCalls = true;
protected boolean allowSlashesInActionNames = false;
@@ -186,8 +188,7 @@ public class DefaultActionMapper impleme
put(METHOD_PREFIX, new ParameterAction() {
public void execute(String key, ActionMapping mapping) {
if (allowDynamicMethodCalls) {
- mapping.setMethod(key.substring(
- METHOD_PREFIX.length()));
+
mapping.setMethod(key.substring(METHOD_PREFIX.length()));
}
}
});
@@ -203,34 +204,10 @@ public class DefaultActionMapper impleme
name = name.substring(0, bang);
}
}
- mapping.setName(name);
+ mapping.setName(cleanupActionName(name));
}
});
- put(REDIRECT_PREFIX, new ParameterAction() {
- public void execute(String key, ActionMapping mapping) {
- ServletRedirectResult redirect = new
ServletRedirectResult();
- container.inject(redirect);
- redirect.setLocation(key.substring(REDIRECT_PREFIX
- .length()));
- mapping.setResult(redirect);
- }
- });
-
- put(REDIRECT_ACTION_PREFIX, new ParameterAction() {
- public void execute(String key, ActionMapping mapping) {
- String location = key.substring(REDIRECT_ACTION_PREFIX
- .length());
- ServletRedirectResult redirect = new
ServletRedirectResult();
- container.inject(redirect);
- String extension = getDefaultExtension();
- if (extension != null && extension.length() > 0) {
- location += "." + extension;
- }
- redirect.setLocation(location);
- mapping.setResult(redirect);
- }
- });
}
};
}
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=1503127&r1=1503126&r2=1503127&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
Mon Jul 15 08:02:23 2013
@@ -21,10 +21,8 @@
package org.apache.struts2.dispatcher.mapper;
-import com.mockobjects.dynamic.Mock;
import com.mockobjects.servlet.MockHttpServletRequest;
import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.Result;
import com.opensymphony.xwork2.config.Configuration;
import com.opensymphony.xwork2.config.ConfigurationManager;
@@ -32,10 +30,8 @@ import com.opensymphony.xwork2.config.en
import com.opensymphony.xwork2.config.impl.DefaultConfiguration;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.StrutsTestCase;
-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;
import java.util.Arrays;
import java.util.HashMap;
@@ -447,7 +443,7 @@ public class DefaultActionMapperTest ext
public void testRedirectPrefix() throws Exception {
Map parameterMap = new HashMap();
- parameterMap.put(DefaultActionMapper.REDIRECT_PREFIX +
"http://www.google.com", "");
+ parameterMap.put("redirect:" + "http://www.google.com", "");
StrutsMockHttpServletRequest request = new
StrutsMockHttpServletRequest();
request.setupGetServletPath("/someServletPath.action");
@@ -458,25 +454,28 @@ public class DefaultActionMapperTest ext
ActionMapping actionMapping = defaultActionMapper.getMapping(request,
configManager);
Result result = actionMapping.getResult();
- assertNotNull(result);
- assertTrue(result instanceof ServletRedirectResult);
+ assertNull(result);
+ }
+
+ public void testUnsafeRedirectPrefix() throws Exception {
+ Map parameterMap = new HashMap();
+ parameterMap.put("redirect:" + "http://%{3*4}", "");
+
+ StrutsMockHttpServletRequest request = new
StrutsMockHttpServletRequest();
+ request.setupGetServletPath("/someServletPath.action");
+ request.setParameterMap(parameterMap);
- Mock invMock = new Mock(ActionInvocation.class);
- ActionInvocation inv = (ActionInvocation) invMock.proxy();
- ActionContext ctx = ActionContext.getContext();
- ctx.put(ServletActionContext.HTTP_REQUEST, request);
- StrutsMockHttpServletResponse response = new
StrutsMockHttpServletResponse();
- ctx.put(ServletActionContext.HTTP_RESPONSE, response);
- invMock.expectAndReturn("getInvocationContext", ctx);
- invMock.expectAndReturn("getStack", ctx.getValueStack());
- result.execute(inv);
- assertEquals("http://www.google.com", response.getRedirectURL());
- //TODO: need to test location but there's noaccess to the
property/method, unless we use reflection
+ DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
+ defaultActionMapper.setContainer(container);
+ ActionMapping actionMapping = defaultActionMapper.getMapping(request,
configManager);
+
+ Result result = actionMapping.getResult();
+ assertNull(result);
}
public void testRedirectActionPrefix() throws Exception {
Map parameterMap = new HashMap();
- parameterMap.put(DefaultActionMapper.REDIRECT_ACTION_PREFIX +
"myAction", "");
+ parameterMap.put("redirectAction:" + "myAction", "");
StrutsMockHttpServletRequest request = new
StrutsMockHttpServletRequest();
request.setupGetServletPath("/someServletPath.action");
@@ -488,17 +487,29 @@ public class DefaultActionMapperTest ext
StrutsResultSupport result = (StrutsResultSupport)
actionMapping.getResult();
- assertNotNull(result);
- assertTrue(result instanceof ServletRedirectResult);
+ assertNull(result);
+ }
- assertEquals("myAction.action", result.getLocation());
+ public void testUnsafeRedirectActionPrefix() throws Exception {
+ Map parameterMap = new HashMap();
+ parameterMap.put("redirectAction:" + "%{3*4}", "");
- // TODO: need to test location but there's noaccess to the
property/method, unless we use reflection
+ StrutsMockHttpServletRequest request = new
StrutsMockHttpServletRequest();
+ request.setupGetServletPath("/someServletPath.action");
+ request.setParameterMap(parameterMap);
+
+ DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
+ defaultActionMapper.setContainer(container);
+ ActionMapping actionMapping = defaultActionMapper.getMapping(request,
configManager);
+
+
+ StrutsResultSupport result = (StrutsResultSupport)
actionMapping.getResult();
+ assertNull(result);
}
public void testRedirectActionPrefixWithEmptyExtension() throws Exception {
Map parameterMap = new HashMap();
- parameterMap.put(DefaultActionMapper.REDIRECT_ACTION_PREFIX +
"myAction", "");
+ parameterMap.put("redirectAction:" + "myAction", "");
StrutsMockHttpServletRequest request = new
StrutsMockHttpServletRequest();
request.setupGetServletPath("/someServletPath");
@@ -511,12 +522,7 @@ public class DefaultActionMapperTest ext
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
+ assertNull(result);
}
public void testCustomActionPrefix() throws Exception {