[ 
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: Pending Review

> 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: Pending Review
>
>
> 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.

Reply via email to