You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2013/01/17 21:22:32 UTC
svn commit: r1434896 -
/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java
Author: lukaszlenart
Date: Thu Jan 17 20:22:32 2013
New Revision: 1434896
URL: http://svn.apache.org/viewvc?rev=1434896&view=rev
Log:
WW-3965 solves problem with double bang in generated URI
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.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?rev=1434896&r1=1434895&r2=1434896&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 Thu Jan 17 20:22:32 2013
@@ -163,19 +163,13 @@ import java.util.Set;
public class DefaultActionMapper implements ActionMapper {
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;
-
protected boolean alwaysSelectFullNamespace = false;
-
protected PrefixTrie prefixTrie = null;
protected List<String> extensions = new ArrayList<String>() {{
@@ -292,12 +286,15 @@ public class DefaultActionMapper impleme
return parseActionName(mapping);
}
+ public boolean isSlashesInActionNames() {
+ return allowSlashesInActionNames;
+ }
+
/*
* (non-Javadoc)
*
* @see org.apache.struts2.dispatcher.mapper.ActionMapper#getMapping(javax.servlet.http.HttpServletRequest)
*/
-
public ActionMapping getMapping(HttpServletRequest request,
ConfigurationManager configManager) {
ActionMapping mapping = new ActionMapping();
@@ -440,7 +437,7 @@ public class DefaultActionMapper impleme
*
* @param name The action name
* @return The action name without its extension
- * @deprecated Since 2.1, use {@link #dropExtension(java.lang.String,org.apache.struts2.dispatcher.mapper.ActionMapping)} instead
+ * @deprecated Since 2.1, use {@link #dropExtension(java.lang.String, org.apache.struts2.dispatcher.mapper.ActionMapping)} instead
*/
protected String dropExtension(String name) {
return dropExtension(name, new ActionMapping());
@@ -517,29 +514,64 @@ public class DefaultActionMapper impleme
*
* @see org.apache.struts2.dispatcher.mapper.ActionMapper#getUriFromActionMapping(org.apache.struts2.dispatcher.mapper.ActionMapping)
*/
-
public String getUriFromActionMapping(ActionMapping mapping) {
StringBuilder uri = new StringBuilder();
+ handleNamespace(mapping, uri);
+ handleName(mapping, uri);
+ handleDynamicMethod(mapping, uri);
+ handleExtension(mapping, uri);
+ handleParams(mapping, uri);
+
+ return uri.toString();
+ }
+
+ protected void handleNamespace(ActionMapping mapping, StringBuilder uri) {
if (mapping.getNamespace() != null) {
uri.append(mapping.getNamespace());
if (!"/".equals(mapping.getNamespace())) {
uri.append("/");
}
}
+ }
+
+ protected void handleName(ActionMapping mapping, StringBuilder uri) {
String name = mapping.getName();
- String params = "";
if (name.indexOf('?') != -1) {
- params = name.substring(name.indexOf('?'));
name = name.substring(0, name.indexOf('?'));
}
uri.append(name);
+ }
- if (null != mapping.getMethod() && !"".equals(mapping.getMethod())) {
- uri.append("!").append(mapping.getMethod());
+ protected void handleDynamicMethod(ActionMapping mapping, StringBuilder uri) {
+ // See WW-3965
+ if (StringUtils.isNotEmpty(mapping.getMethod())) {
+ if (allowDynamicMethodCalls) {
+ // handle "name!method" convention.
+ String name = mapping.getName();
+ if (!name.contains("!")) {
+ // Append the method as no bang found
+ uri.append("!").append(mapping.getMethod());
+ }
+ } else {
+ uri.append("!").append(mapping.getMethod());
+ }
}
+ }
+
+ protected void handleExtension(ActionMapping mapping, StringBuilder uri) {
+ String extension = lookupExtension(mapping.getExtension());
- String extension = mapping.getExtension();
+ if (extension != null) {
+ if (extension.length() == 0 || (extension.length() > 0 && uri.indexOf('.' + extension) == -1)) {
+ if (extension.length() > 0) {
+ uri.append(".").append(extension);
+ }
+ }
+ }
+ }
+
+ protected String lookupExtension(String extension) {
if (extension == null) {
// Look for the current extension, if available
ActionContext context = ActionContext.getContext();
@@ -553,24 +585,18 @@ public class DefaultActionMapper impleme
extension = getDefaultExtension();
}
}
+ return extension;
+ }
- if (extension != null) {
- if (extension.length() == 0 || (extension.length() > 0 && uri.indexOf('.' + extension) == -1)) {
- if (extension.length() > 0) {
- uri.append(".").append(extension);
- }
- }
+ protected void handleParams(ActionMapping mapping, StringBuilder uri) {
+ String name = mapping.getName();
+ String params = "";
+ if (name.indexOf('?') != -1) {
+ params = name.substring(name.indexOf('?'));
}
if (params.length() > 0) {
uri.append(params);
}
-
- return uri.toString();
- }
-
-
- public boolean isSlashesInActionNames() {
- return allowSlashesInActionNames;
}
}