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.