You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Paul Benedict (JIRA)" <ji...@apache.org> on 2008/12/22 06:03:37 UTC
[jira] Updated: (STR-3132) Improve wildcards resolution in
action-mappings
[ https://issues.apache.org/struts/browse/STR-3132?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Paul Benedict updated STR-3132:
-------------------------------
Fix Version/s: (was: Pending Review)
Future
> Improve wildcards resolution in action-mappings
> -----------------------------------------------
>
> Key: STR-3132
> URL: https://issues.apache.org/struts/browse/STR-3132
> Project: Struts 1
> Issue Type: Improvement
> Components: Core
> Affects Versions: 1.3.8
> Environment: Struts 1.3.8
> Reporter: Laurent MORIN
> Fix For: Future
>
>
> Hello
> In my struts-config.xml, i define generic mappings using wildcards to normalize actions suite.
> The is no posibility actualy to define 2 action mappings with the same path structure but not the same configuration.
> My exemple is :
> <action path="/*/*/prepare"
> name="{1}Form" scope="session"
> validate="false"
> command="prepare-{2}-{1}" catalog="cctp-{1}"
> forward="/{1}/{2}/prepare/rooting.do">
> </action>
> <action path="/*/*/prepare"
> name="{2}Form" scope="session"
> validate="false"
> command="prepare-{2}-{1}" catalog="cctp-{1}"
> forward="/{1}/{2}/prepare/rooting.do">
> </action>
> Struts always retrieve the second one, even if the mapping is not correct (wrong form name, wrong command ...)
> The only way i found to enable this behavior, is to setup the following property in action servlet (web.xml)
> <init-param>
> <param-name>configFactory</param-name>
> <param-value>org.apache.struts.config.impl.CustomMatcherModuleConfigFactory</param-value>
> </init-param>
> And Then redfine , ModuleConfigFactory, ModuleConfigImpl and ActionConfigMatcher.
> Just to redefine the method "match" in ActionConfigMatcher as following:
> public ActionConfig match(String path) {
> ActionConfig config = null;
> if (compiledPaths.size() > 0) {
> if (log.isDebugEnabled())
> log.debug("Attempting to match '" + path + "' to a wildcard pattern");
> if (path.length() > 0 && path.charAt(0) == '/')
> path = path.substring(1);
> HashMap vars = new HashMap();
> Iterator i = compiledPaths.iterator();
> do {
> if (!i.hasNext())
> break;
> Mapping m = (Mapping) i.next();
> if (wildcard.match(vars, path, m.getPattern())) {
> if (log.isDebugEnabled())
> log.debug("Path matches pattern '" + m.getActionConfig().getPath() + "'");
> ActionConfig lTempconfig = convertActionConfig(path, m.getActionConfig(), vars);
>
> // Test if ActionConfig is correct before returning it
> if(StringUtils.isNotBlank(lTempconfig.getName()) && lTempconfig.getModuleConfig().findFormBeanConfig(lTempconfig.getName()) == null) {
> // The form doesn't exists
> log.debug("FormBean not defined '" + lTempconfig.getName() + "' config ignored");
> } else {
> config =lTempconfig;
> }
>
> }
> } while (true);
> }
> return config;
> }
> In that exemple i just test formBean config but it is important to chek all actionConfigs such as class, command ...
> thanks
> LAurent MORIN
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.