Hi Bill,

so you say, it is good practice to use the two forms in one action as I do
in my current solution? Sure, one has to hide the internals from AF1 to an
action primarily designed to use AF2 to keep the address module generic.
Perhaps I should make the calling ActionForms implement a specific
interface.
If I really want a fully generic address module I would have to split the
action(s) in two, simply because the actions designed for the address module
need a generic API. I cannot rely (for full genericity) on a "calling"
module to use AF1. In my current situation I will probably ignore this as it
is a straightforward refactoring which can be done when need occurs. 
As to the question request vs. session scope I understand the problems which
might occur using session scope.
I do not see a solution which would also fulfil the modularization
requirement.

Thanks!

Martin

> -----Ursprüngliche Nachricht-----
> Von: Bill Keese [mailto:[EMAIL PROTECTED] 
> Gesendet: Dienstag, 16. November 2004 02:10
> An: Struts Users Mailing List
> Betreff: Re: AW: using multiple action forms in one action. 
> Best practice?
> 
> 
> Hi Martin,
> 
> > From this JSP I want to access a (hopefully) generic module 
> to get the 
> > access points. This "module" has to get some information (e. g. a 
> > region to prefilter the addresses or access points already 
> existing) 
> > from JSP1.
> >
> I think you should  generate the input to the generic module, rather 
> than passing the ActionForm directly:
> 
>    // get data from ActionForm1 needed to look up addresses
>    AddressLookupInfo info = getAddressInfoFromActionForm1(AF1);
> 
>    // lookup addresses
>    List res = AddressLookup.getAddresses(info);
>     ...
> 
> Then your module can still be generic.
> 
> > I could take the necessary information from AF1 to some 
> POJO (or bean) 
> > on model level (or controller level) and transfer it to 
> AF2. This is 
> > probably the "cleanest" solution but means to split each 
> action into 
> > two, just to do
> > the data transfer.
> >  
> >
> You shouldn't need to split each action into two.  Action1's 
> job is to 
> handle the input from ActionForm1, and then do the setup to display 
> JSP2, right?  So, just create the ActionForm2 manually inside Action1:
> 
>   // Create AF2 as an input/output form
>   ActionForm2 af2 = new ActionForm2();
>   session.setAttribute("actionForm2", af2);
> 
>   // ... and pre-populate it with the data the user has already input
>   ActionForm1 af1 =
>            (ActionForm1) getActionForm(mapping, form, 
> request, session);
>   af2.loadDataFromAF1(af1);
> 
>   // forward control to JSP2
>   return (mapping.findForward("jsp2"));
> 
> > My current solution simply accesses both action forms, AF1 and AF2
> > (getting
> > the one not available as the "form"-parameter by MyForm mf = 
> > (MyForm)session.getAttribute("AFi");
> > but my feeling is that this is not really good style.
> >  
> >
> I guess it depends on whether you consider the two forms to represent 
> one logical command or two logical commands.
> 
> The other thing to consider, though, is whether or not you 
> want to store 
> the ActionForms at session scope.   Session scope is 
> problematic because 
> you might end up accessing old data (if the user previously 
> quit in the 
> middle of a wizard).  Also, I imagine things would fail in a 
> distributed 
> application where the user's requests are randomly routed to multiple 
> servers.    The alternative is to use request level scope, 
> but in this 
> case the information entered in Form#1 has to be embedded in 
> the output 
> of JSP2 as hidden HTML variables.
> 
> Bill
> 
> ---------------------------------------------------------------------
> 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]

Reply via email to