Thanks Craig. I disagree but that's okay; I find identifying other actions by 
names makes perfect
sense and is the logical outcome of development. The idea was spawned by the 
ease of Spring which
I can reference anything else by a name. Anyhow, if you have time, I think your 
answer should be
appeneded to the bug request so that we can perpetually keep your explanation.

Paul

--- Craig McClanahan <[EMAIL PROTECTED]> wrote:

> On 11/25/05, Paul Benedict <[EMAIL PROTECTED]> wrote:
> >
> > >>Given that chaining actions is a bad practice, for reasons that I've
> > stated many times before,
> > I'm not really interested in providing support to encourage people to use
> > that pattern.
> >
> > Me neither. I've written many times on the boards why I don't like the
> > chaining pattern either.
> > The good news is, that's not what this enhancement is! This proposal is
> > about naming your actions
> > so that you can refer to them in other forwards. So if you have an action
> > named "foo" you can
> > forward directly to "foo" without having to re-write the action path
> > again. I hope this clears up
> > your confusion -- it's not chaining, it's resolution.
> >
> > >> Also, there is an XML-related reason that we don't use the 'id'
> > attribute in the Struts config
> > files, although it is defined. Unfortunately, it's too early and I haven't
> > had coffee yet, so that
> > reason escapes me right now.
> >
> > W3C has a proposal to make the ID attribute a reserved attribute for all
> > tags, to uniquely
> > identify them in a document. This fits perfectly into this schema, since
> > you would logically would
> > never have duplicate action names.
> >
> > I would have liked to chosen a different attribute (like name), but
> > unforunately the <action> and
> > <forward> tags do not synch. The [EMAIL PROTECTED] refers to the bean you 
> > want
> > to use, and the
> > [EMAIL PROTECTED] refers to its, well, name. Once I noticed this, it looked
> > confusing; so I settled on
> > "id" as an acceptable attribute name.
> 
> 
> I'm uncomfortable with this proposal for the reasons Martin is, but also for
> some others.
> 
> * You are introducing a syntax that creates two unique identifiers
>   for an action ... id and path.  That seems like an unnecessary redundancy.
> 
> * You are overloading the "path" element inside the forward element
>   to mean multiple things, and requiring a namespace escape to
>   disambiguate things.  Besides being more complicated to understand,
>   this will break tools that understand the current semantics of
>   Struts configuration files so badly that 1.3 users would need to wait
>   longer than otherwise necessary to get support for 1.3.
> 
> * The most important reason I dislike this change, however, is an
>   architectural desgn issue that few in the Struts community seem
>   to appreciate ... an ActionForward should represent a *logical outcome*
>   of an Action, not a *menu choice*.  Let me explain further.
> 
> Consider the little search box (with a "Go" button) that we like to put on
> pages of our applications, to allow users to do text based searching on
> things.  Now, consider that you are authoring the Struts action that
> actually performs the search.  The author of this code should require *no*
> knowledge of where in the application they wil be sent after the search is
> completed -- his/her only job is to say "what happened" when the search took
> place.
> 
> Logically, there are three interesting outcomes we might want to describe:
> 
> * No results at all were found -- outcome "none".
> 
> * Exactly one result was found -- outcome "single".
> 
> * More than one result was found -- outcome "multiple".
> 
> I would argue that the search Action should return these three results as
> three separate logical outcomes.  It is up to the application architect to
> decide to send all three outcomes to the "here's the list of responses"
> table page.  It's also up to the application architect (perhaps later, in
> response to user feedback) to say "let's do this instead":
> 
> * If there's no results, go to a page that says "sorry, no results were
> found,
>   please try your search again."
> 
> * If there's exactly one response, go to the details page to display the
>   corresponding data.
> 
> * If there's more than one response, go to the list page (as per the
>   previous behavior).
> 
> Note that *nothing* in the forwards defined for the search action, or the
> code inside it, is affected by this decision.  Indeed, the outcomes returned
> by an action are *much* more stable than the places that you (as the
> application architect) mght want to send the user next.  The only time you
> have to change them is when you add new interesting outcomes that need to be
> accomodated in the navigation architecture of your app.
> 
> I agree with you that the names of forwards and the paths they go to can be
> fragile at times ... but I submit that this is primarily the result of how
> we are using them.  Adding yet another identifier doesn't help, because now
> you've got *two* fragile identifiers for the same concept.  If you think in
> terms of logical outcomes, though, you'll find this problem to be much less
> serious.  Simply have each Action document the logical outcomes it returns,
> with meaningful nouns to describe them, and let the architect stitch
> together the navigation as the struts-config.xml file is composed.
> 
> (Even if it is *you* playing both roles -- developer and archtect -- you
> will find that this change of viewpoint really helps the long term
> maintainability of your application's navigation architecture.)
> 
> 
> -- Paul
> 
> 
> Craig
> 
> PS:  If you ever hear me talk or write about JSF navgation, you'll hear
> exactly the same thing ... the strings returned by action methods should be
> *outcomes*, not *destinations*.
> 



                
__________________________________________
Yahoo! DSL – Something to write home about.
Just $16.99/mo. or less.
dsl.yahoo.com


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to