You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by rakeshxp <ra...@gmail.com> on 2007/08/15 13:51:15 UTC

Re: Struts 2 URL parameters lost - final status

I am using Struts 2.0.6 and the jar contains struts struts-default.xml which
contains the following property 
<bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="struts"
class="org.apache.struts2.dispatcher.mapper.DefaultActionMapper" />
    <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper"
name="composite"
class="org.apache.struts2.dispatcher.mapper.CompositeActionMapper" />
    <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper"
name="restful"
class="org.apache.struts2.dispatcher.mapper.RestfulActionMapper" />
    <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper"
name="restful2"
class="org.apache.struts2.dispatcher.mapper.Restful2ActionMapper" />
    
We have a struts.xml in WEB-INF/classes folder and I was trying to override
the default actionmapper by having the following lines in my struts.xml (
just for testing I am overriding with the default class itself )
<bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="struts"
class="org.apache.struts2.dispatcher.mapper.DefaultActionMapper" />

But this results in an error when I started up tomcat
Unable to load bean: type:org.apache.struts2.dispatcher.mapper.ActionMapper
class:org.apache.struts2.dispatcher.mapper.DefaultActionMapper - bean -
file:/C:/software/tomcat6/webapps/abc/WEB-INF/classes/struts.xml:17:149

Caused by: Bean type interface
org.apache.struts2.dispatcher.mapper.ActionMapper with the name struts has
already been loaded by [unknown location] - bean -
file:/C:/software/tomcat6/webapps/abc/WEB-INF/classes/struts.xml:17:149

So the question that I have are 
1) How do I override the mapping class ?
2) Why are there 4 bean declaration for actionmapper ? 

thanks in advance!



JBL wrote:
> 
> Final answer: we implemented a custom ActionMapper that handles a URL
> string that doesn't involve a ? to separate the query parameters. Stuck a
> reference to it in struts.properties:
> 
> struts.mapper.class=mypackage.MyActionMapper
> 
> Building a new ActionMapper isn't terribly difficult. It helps to define
> your expected URLs with a regular expression, then use a precompiled
> pattern. Ours looks something like:
> 
> private static String NAMESPACE_REGEX = "...";
> private static String ACTION_REGEX = "...";
> private static String METHOD_REGEX = "...";
> private static String PARAMS_REGEX = "...";
> 
> private static String URI_REGEX = (concatenate the four above)
> 
> private static Pattern URI_PATTERN = Pattern.compile(URI_REGEX);
> 
> Then, in getMapping(), pull out the URI (similar to DefaultActionMapper)
> and call
> 
> Matcher m = URI_PATTERN.matcher(uri);
> 
> If you get a match, create a new ActionMapping and set its components
> based on the matching groups:
> 
> mapping.setNamespace(m.group(1));
> mapping.setName(m.group(1));
> 
> etc.
> 
> You can parse the parameter section and build a map to pass to
> mapping.setParams().
> 
> Using a precompiled pattern may or may not be the most efficient possible
> solution, but it helps you define exactly what URIs you expect. I
> recommend throwing a bunch of possibilities at it in your unit test code
> with various components present and missing. If you're a little unsure
> about regular expressions, build some unit tests for those, too. Sun has a
> decent write-up in their Java documentation:
> 
> http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/Pattern.html
> 
> Especially read the "Groups and Capturing" section, it's a handy tool to
> have in your portfolio.
> 
> We may yet discover why we couldn't get query parameters, but this works
> for now. Good luck.
> 

-- 
View this message in context: http://www.nabble.com/Struts-2-URL-parameters-lost-tf4196254.html#a12160600
Sent from the Struts - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org