I agree with David that it's more coherent and pratical to put all the pieces of a module under the same root. When I tryed to patch this problem I first thought to turn ActionConfig.forward and ActionConfig.input into ForwardConfig rather than String, but I don't master Struts enought to do it so I patched it more trivialy waiting for your advice.
I'm just the reporter but I think that if you don't patch it at all, forwardPattern is useless. I can't figure out how one can use it... or what ? Putting the resources pointed by input and forward in another place than ForwardConfigs ? No interest... So if you absolutly whant to relase 1.1, frankly remove forwardPattern and pagePattern features until you think more about it and let the default $M$P which works. Malik. Sunday, February 09, 2003 3:39 AM , David Graham <[EMAIL PROTECTED]> a écrit : > My understanding of modules is that they're independent pieces that > can plug into any Struts app. They can point to external resources > if they want but don't need to. Based on that, I believe all > resources for a module should live in the same module root directory. > You shouldn't have some jsps under WEB-INF, actions somewhere else, > etc. So, you should be able to use the <controller> forwardPattern > attribute to point to each module's root directory. > > Any place that you say "module relative" should not assume $M$P but > the full module root directory. I believe that includes *all* of the > scenarios described. I don't understand why we would discriminate on > the forwarding implementation based on what kind of thing you're > forwarding to. IMHO, it doesn't matter, every kind of resource > belongs to the module. > > +1 on doing this in 1.2 > > David > > > > > From: "Craig R. McClanahan" <[EMAIL PROTECTED]> > > Reply-To: "Struts Developers List" <[EMAIL PROTECTED]> > > To: [EMAIL PROTECTED] > > CC: [EMAIL PROTECTED] > > Subject: [Bugzilla #16603] Discussion Please > > Date: Sat, 8 Feb 2003 15:23:23 -0800 (PST) > > > > OK, I've assigned myself the following bugzilla ticket: > > > > http://nagoya.apache.org/bugzilla/show_bug.cgi?id=16603 > > > > and am trying to decide how to deal with it. I think I understand > > what the reporter (cc'd above) is proposing. What's not clear is > > whether we should make any change now, or perhaps ever. I'd like > > to discuss that here before deciding. > > > > > > Background: > > ---------- > > > > For a while now, we have supported the "forwardPattern" and > > "pagePattern" properties on the ControllerConfig object. These > > patterns support certain substitutions so that you can, for > > example, declare that you want your JSP pages under /WEB-INF so > > that they can be accessible only via RequestDispatcher.forward() > > calls. > > > > Example scenario (assume a module prefix of "/mymodule"): > > > > <global-forwards> > > ... > > <forward name="Main Menu" path="/mainmenu.jsp" > > contextRelative="false"/> > > ... > > </global-forwards> > > > > <controller ... forwardPattern="/WEB-INF/pages$M$P" .../> > > > > If an Action returns the "Main Menu" ActionForward (nee > > ForwardConfig) object, the request procesor will ultimately call > > RequestUtils.forwardURL() to calculate the context-relative path > > of "/WEB-INF/pages/mymodule/mainmenu.jsp". If no forward pattern > > had been specified, the default mechanism would have returned > > "/mymodule/mainmenu.jsp" instead. > > > > So far, so good. Now we've got a way to "globally redirect" the > > URLs within a module, without having to modify all of the > > individual paths in our forward directives. > > > > The problem pointed out by the Bugzilla ticket, though, is that we > > do not respect forwardPattern universally; it is *only* used in the > > scenario described above, plus in a couple of other special cases. > > > > > > Other Potential Remapping Scenarios: > > ----------------------------------- > > > > Scanning the code for the core Struts controller (I didn't check > > the Tiles request processor, but suspect it might have similar > > issues), there are several other scenarios where one might argue > > that the remapping through the specified forwardPattern would make > > sense. The ones I found are as follows, numbered for reference in > > later discussion: > > > > (1) <action ... forward="/foo" .../> > > > > Tells request processor to handle this request by performing > > a RequestDispatcher.forward() to the specified "module-relative > > path of the servlet or other resource that will process this > > request", instead of invoking an Action. This path is not > > currently processed by any specified "forwardPattern", instead > > a pattern of "$M$P" is assumed. > > > > (2) <action ... include="/foo" .../> > > > > Tells request processor to handle this request by performing > > a RequestDispatcher.include() to the specified "module-relative > > path of the servlet or other resource that will process this > > request", instead of invoking an Action. This path is not > > currently processed by any specified "forwardPattern", instead > > a pattern of "$M$P" is assumed. > > > > (3) <action ... input="/foo" .../> > > > > There are actually two subcases here, depending on the state of > > the "inputForward" property of our module's ControllerConfig: > > > > (3a) <controller ... inputForward="true" .../> > > > > The value of the "input" property is treated as the name > > of a local or global ForwardConfig, which is then processed > > through the forwardPattern remapping just like an > > ActionForward returned from an Action would be. > > > > (3b) <controller ... inputForward="false" .../> > > > > The value of the "input" property is treated as the > > "module-relative path of the action or other resource > > to which control should be returned if the form bean > > returns validation errors. This path is not currently > > processed by any specified "forwardPattern", instead a > > pattern of "$M$P" is assumed. > > > > Note that 3b is the default for backwards compatibility: > > > > (4) <action ... path="/foo" .../> > > > > This is the module-relative path that is used to match a > > request to a particular action. It is not currently mapped > > through any specified "forwardPattern", instead a pattern of > > "$M$P" is assumed. > > > > (5) <exception ... path="/foo" .../> > > > > This is the module-relative path of the resource that should > > complete this request/response if an Action throws an exception > > of the specified type. Whether remapping occurs or not is up to > > the ExceptionHandler that is invoked; the default implementation > > constructs an ActionForward based on this path (but sets the > > contextRelative property, which looks like a bug but isn't > > related to the issue at hand here), which will get processed > > through the "forwardPattern" remapping if we fixed the > > contextRelative bug. > > > > So, we currently do the remapping in case (3b), and ought to be > > doing it in case (5). But what about the other scenarios? > > > > > > Analysis: > > -------- > > > > The underlying issue is that we have fallen into the (bad, but > > that's hindsight for you) habit of using ActionForward instances to > > point at (at least) three very different kinds of things: > > > > (a) The view tier component that should actually render > > the response (typically a JSP page) > > > > (b) The next action to execute, if you are doing action > > chaining > > > > (c) The "application resource" that should handle a thrown > > exception from an action (which could be a view tier > > component, an arbitrary servlet, or an action) > > > > The original intent of "forwardPattern" was to cover case (a) only, > > because it was (in theory) only the view tier components that you'd > > want to redirect for (i.e. to put JSP pages under /WEB-INF, or > > otherwise remap the set of view components for a particular > > module). Case (b) seems like it should NOT be mapped, for > > consistency with how case (4) is handled (mapping the original > > request to the original action in the first place). Case (c) should > > probably be remapped if it's a view component, but not if it's an > > action. > > > > But there is nothing about an ActionForward that lets you > > unambiguously determine whether it points at a view component or > > not. :-( > > > > > > Recommendation: > > -------------- > > > > If we were not imminently trying to release a 1.1 final, I would be > > tempted to design and work out a strategy for dealing with this > > ambiguity problem, and hash out what the right behavior should be > > in each case. However, at this point in time, I'm going to suggest > > that we resolve this one as LATER and put it into the "1.2 Family" > > camp. We're going to need to deal with it in a 1.2 time frame > > anyway, especially if we try to implement any sort of "module > > configuration inheritance" mechanisms, which are only going to make > > the problem worse. > > > > In a 2.0 time frame, the lesson I draw from this is that we will > > want to be very specific in defining how mapping of logical paths > > to physical paths is performed, including a way to distinguish what > > kind of logical path you're talking about (so that you can apply > > different rules for view components and for action components, for > > example). > > > > Does this sound like a plan that we (committers) can agree to? > > > > Craig > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > _________________________________________________________________ > MSN 8 with e-mail virus protection service: 2 months FREE* > http://join.msn.com/?page=features/virus > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]