diff --git a/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java b/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java index 7452bd415..470e033b2 100644 --- a/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java +++ b/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java @@ -101,6 +101,7 @@ public class PackageBasedActionConfigBuilder implements ActionConfigBuilder { private Set fileProtocols; private boolean alwaysMapExecute; private boolean excludeParentClassLoader; + private boolean slashesInActionNames; private static final String DEFAULT_METHOD = "execute"; @@ -150,6 +151,12 @@ public class PackageBasedActionConfigBuilder implements ActionConfigBuilder { public void setReload(String reload) { this.reload = "true".equals(reload); } + + + @Inject(StrutsConstants.STRUTS_ENABLE_SLASHES_IN_ACTION_NAMES) + public void setSlashesInActionNames(String slashesInActionNames) { + this.slashesInActionNames = "true".equals(slashesInActionNames); + } /** * Exclude URLs found by the parent class loader. Defaults to "true", set to true for JBoss @@ -578,7 +585,7 @@ public class PackageBasedActionConfigBuilder implements ActionConfigBuilder { List actions = map.get(method); for (Action action : actions) { PackageConfig.Builder pkgCfg = defaultPackageConfig; - if (action.value().contains("/")) { + if (action.value().contains("/") && !slashesInActionNames) { pkgCfg = getPackageConfig(packageConfigs, namespace, actionPackage, actionClass, action); } @@ -780,7 +787,7 @@ public class PackageBasedActionConfigBuilder implements ActionConfigBuilder { if (annotation != null) { actionName = annotation.value() != null && annotation.value().equals(Action.DEFAULT_VALUE) ? actionName : annotation.value(); - actionName = StringUtils.contains(actionName, "/") ? StringUtils.substringAfterLast(actionName, "/") : actionName; + actionName = StringUtils.contains(actionName, "/") && !slashesInActionNames ? StringUtils.substringAfterLast(actionName, "/") : actionName; } ActionConfig.Builder actionConfig = new ActionConfig.Builder(pkgCfg.getName(),