struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Michael Jouravlev" <jmi...@gmail.com>
Subject Re: validation breaks my form prepopulation
Date Thu, 04 May 2006 00:05:07 GMT
Are you saying that you've tried to call two mappings, one with an
associated actionForm and another without, and when calling action
without associated form you get a valid reference to a form? Are you
sure? Because it does not sound right, you should get null.

On 5/3/06, Kyle W. Cartmell <KyleCartmell@firstfinance.org> wrote:
> So in a Struts web application if I supply two mappings for a single
> action, one that has a form and one that does not, and I call the one
> with the form and then a few seconds later call the one without, the
> form parameter to the execute method is not null on the second call. I
> don't understand why this would be so...
>
> Michael Jouravlev wrote:
> > On 5/3/06, Kyle W. Cartmell <KyleCartmell@firstfinance.org> wrote:
> >> I did some tinkering and found that even though my setup action is
> >> indeed associated with a form bean, and my reset method is defined and
> >> sets my values to null, when I return to an action from a validation
> >> failure or forwarded from another action, the form that I originally
> >> used to populate the data on that page is present and intact.
> >>
> >> 1. Is it reasonable to simply make use of this mechanic to allow this
> >> data to persist?
> >
> > How many forms do you have: one or two? If two, do they have
> > properties with the same names? If I remember correctly, this should
> > work somewhat like this:
> >
> > * You submit an HTML form to a submit action, well, actually to an
> > action mapping
> > * If actionform is defined for the mapping, it is initialized. That
> > means, that if it has request scope, it is created. If it has session
> > scope it is usually reused (this is not guaranteed, but I've yet to
> > encounter the situation when session-scoped form was not reused).
> > * reset() is called on form
> > * form is populated from request parameters
> > * if "validate" attribute of the action mapping is set to true,
> > validate() is called
> > * if validate() returns non-empty object and you have "input"
> > attribute set, then control is forwarded to the location defined in
> > the "input". (Hmm, what happens if you have validate="true" but do not
> > have "input" attribute?) By the way, it is possible to redirect to
> > "input" location instead of forwarding, but this is done globally for
> > all mappings in the config file.
> > * If you do a regular forward using "input" attribute, the
> > request/response sequence has not been finished yet, so all objects
> > that were created when you submitted the request, are still there,
> > including request-scoped actionform and request object itself. So, if
> > you forward to a regular JSP page, you can pull data from the
> > actionform or from request object.
> > * Now, the fun part. If you forward to a setup action, then Struts
> > will look for an actionform associated with this mapping, and will
> > call reset() on it, then it will try to populate it from the request
> > object, then it will call validate() if you have validate="true". So,
> > if you forward to a setup action and you have changed content of the
> > actionform, you should either NOT associate a form with an action.
> > Because otherwise your changes to actionform fields will be
> > overwritted from the request object. Does it make sense? ;-)
> >
> >> 2. I find that I am shocked by some astounding discovery regarding
> >> Struts functionallity, and I have gone through all of the documentation
> >> on the website, can anyone direct me toward comprehensive (or as close
> >> as possible) documentation of Struts internals in hopes that I can stop
> >> posting silly questions here and not have to resort to reading source?
> >
> > I think that it all clears when you understand how scoped objects are
> > managed, and how the request/response cycle works. The key here is
> > that Struts runs its portion of request/response code whenever you
> > call an action mapping, even if you make a server-side forward.
> >
> > I wrote a small article on that topic [1]. It is not perfect and,
> > frankly, needs a rewrite (I introduced my own names to some of the
> > action/form combinations), I would do some things differently. But
> > some sections of it are still valuable. Take a look at "Two actions,
> > one form" and "Two actions, two forms" sections. Currently I prefer to
> > use only one actionform and two action classes (input and render) for
> > one web resource.
> >
> > Oh yeah, and as the article says, use the same scope if you use the
> > same form name :-) Otherwise you'll get some funny results.
> >
> > Michael.
> >
> > [1]
> > http://www.theserverside.com/articles/article.tss?l=StrutsActionMapping
> --
> Kyle W. Cartmell
> Sr. Software Developer
> LAP Holdings, LLC dba First Finance
> Phone: (480) 222-0050
> Toll Free: (800) 355-3135
> kylecartmell@firstfinance.org
> www.efirstfinance.com

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


Mime
View raw message