You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Karin Schellner <ka...@researchstudio.at> on 2005/08/29 14:44:40 UTC
how to init forms?
Hi,
I just started implementing a webapplication using Struts and could not
find a good solution for the following (- not so uncommon as I would
guess -) problem:
Each authenticated user has a userprofile with personal data which
he/she can edit via a "PersdataForm". The initial values for this form
should be retrieved from the database, i.e. there is a BO somewhere
containing these data. There is a "PersdataAction" writing the changed
values back to the BO.
How would I best initiate the form? - the FormBeans "reset" method seems
not to be the right place because it is called too often - should I use
another Action? but how would the configuration look like in such a
scenario?
Thanks in advance for your ideas on this problem!
karin.
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org
Re: how to init forms?
Posted by Hubert Rabago <hr...@gmail.com>.
Check out Rick's Struttin with Struts lessons. Lesson 2 covers form
prepopulation.
http://www.reumann.net/struts/lesson2.do
Hubert
On 8/29/05, Karin Schellner <ka...@researchstudio.at> wrote:
> Hi,
> I just started implementing a webapplication using Struts and could not
> find a good solution for the following (- not so uncommon as I would
> guess -) problem:
> Each authenticated user has a userprofile with personal data which
> he/she can edit via a "PersdataForm". The initial values for this form
> should be retrieved from the database, i.e. there is a BO somewhere
> containing these data. There is a "PersdataAction" writing the changed
> values back to the BO.
>
> How would I best initiate the form? - the FormBeans "reset" method seems
> not to be the right place because it is called too often - should I use
> another Action? but how would the configuration look like in such a
> scenario?
>
> Thanks in advance for your ideas on this problem!
> karin.
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org
Re: how to init forms?
Posted by Joe Germuska <Jo...@Germuska.com>.
This is something which is kind of awkward in Struts 1.2. I think
we've got a pretty decent approach in Struts 1.3, but I guess we'll
have to wait until more people start checking that out to find out.
Basically, the approach is to prepare a FormBean instance in an
action and populate its values with those you want to see in the
form. If the FormBean is in the right place, then when the page
draws, the form tag and its child elements will be populated based on
the FormBean instance.
The "right place" is dependent on the "name" and "scope" of the
action in the <html:form>'s action attribute. Specifically, the bean
should be in either request or session scope (accordingly) under an
attribute name which matches the Form Bean's name.
First, how it should be done in Struts 1.3, because it's more
straightforward; below that, the gist of how to do it in Struts 1.2.
Before midway through the Struts 1.2 development line, there was even
less API support, so I won't get into the details -- hopefully there
aren't a lot of people still using Struts 1.1, but if you needed, you
could probably work out the gist of it from what comes below.
So, in Struts 1.3, there is a generic command, "CopyFormToContext".
If you configure this command simply with the submission destination
(action path) of the form you want to prefill, Struts will create a
form bean (or reuse an existing one if possible) and put it where it
needs to be for the form to use it as a prefill source. You then
need to follow that command with another which would be customized to
your needs and which would perform the prefilling logic. You can
configure CopyFormToContext so that besides putting the form where
the <html:form> tag needs it, it can also put a reference under any
arbitrary Context key, so that your population command can find it
easily.
I won't get into the details of configuring chains and commands here,
except to note that you can hook a command to any action or forward,
so that this behavior is executed "en route" to your view. I'll be
happy to answer follow-on questions as necessary, but first, a bit
more about how this works in Struts 1.2 (which is what the above does
behind the scenes.)
The problem is that in Struts 1.2, you need to hard-code more than I
really like about the config files into your actions, and the API is
not entirely straightforward. There are methods in ModuleUtils and
RequestUtils to get a hold of the relevant objects and ultimately get
a form instance, but the responsibility for putting that form bean
back into the correct scope under the correct key is still not
centralized. (It's actually not universally centralized in Struts
1.3 either, but still, there's a enough support for this specific
task that it's not such a big deal.)
I recommend using the API for getting a form bean instance because
it's pretty cumbersome to instantiate dynaforms yourself. The steps
are: get the ModuleConfig (static, only requires an instance of
HttpServletRequest), then from the module config, get the
ActionMapping (aka ActionConfig) (just takes the action path of the
submit destination of the form you want to prepare), and then get the
Form instance using the static RequestUtils.createActionForm(request,
mapping, moduleConfig, servlet). Now you have the bean you wish to
populate, After you populate it, there is no specific Struts API
method, but you can use the ActionMapping (the one you looked up, not
the one passed in to your preparation action) to find the correct
scope and name.
ModuleUtils.getModuleConfig(request)
http://struts.apache.org/api/org/apache/struts/util/ModuleUtils.html#getModuleConfig(javax.servlet.http.HttpServletRequest)
ModuleConfig.findActionConfig
http://struts.apache.org/api/org/apache/struts/config/ModuleConfig.html#findActionConfig(java.lang.String)
RequestUtils.createActionForm(request, mapping, moduleConfig, servlet)
http://struts.apache.org/api/org/apache/struts/util/RequestUtils.html#createActionForm(javax.servlet.http.HttpServletRequest,%20org.apache.struts.action.ActionMapping,%20org.apache.struts.config.ModuleConfig,%20org.apache.struts.action.ActionServlet)
I hope this helps. The relative difficulty of achieving this
compared to the regularity with which it is needed has been bothering
me for years, and I hope that people will agree that it is getting
easier in newer versions of Struts.
Joe
At 2:44 PM +0200 8/29/05, Karin Schellner wrote:
>Hi,
>I just started implementing a webapplication using Struts and could
>not find a good solution for the following (- not so uncommon as I
>would guess -) problem:
>Each authenticated user has a userprofile with personal data which
>he/she can edit via a "PersdataForm". The initial values for this
>form should be retrieved from the database, i.e. there is a BO
>somewhere containing these data. There is a "PersdataAction" writing
>the changed values back to the BO.
>
>How would I best initiate the form? - the FormBeans "reset" method
>seems not to be the right place because it is called too often -
>should I use another Action? but how would the configuration look
>like in such a scenario?
>
>Thanks in advance for your ideas on this problem!
>karin.
>
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>For additional commands, e-mail: user-help@struts.apache.org
--
Joe Germuska
Joe@Germuska.com
http://blog.germuska.com
"Narrow minds are weapons made for mass destruction" -The Ex
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org