Bill,

you seem to understand my application quite well. The metaphor of
region/shops is excellent.

What adds a bit of complexity is that the "shop"-module is just one of
several. There might be an additional
"people"-module, a "statistical data"-module, etc. Thus serializing the
editing process in a wizard style would impose an order on the process which
is not very pleasant. Also, I would like to reuse the forms/action for
editing already existing objects/regions, where the order enforced by a
wizard is not appropriate.

But I think I have learned fromthis discussion how it could be implemented
reasonably.
The only exception being the question of scope which is not that important
in my case.

Martin


> -----Ursprüngliche Nachricht-----
> Von: Bill Keese [mailto:[EMAIL PROTECTED] 
> Gesendet: Mittwoch, 17. November 2004 01:48
> An: Struts Users Mailing List
> Betreff: Re: AW: AW: using multiple action forms in one 
> action. Best practice?
> 
> 
> It's hard for me to answer because I don't really understand your 
> application.  JSP1 is for picking a region, and then JSP2 is 
> for picking 
> stores within that region, right? And then after picking the 
> stores, you 
> display a confirmation page with the map and the list of 
> picked stores?
> 
> When you hit the "save" button on the confirmation page, the input to 
> the SaveAction is both the selected region and the selected stores, 
> right?  So you are combining the information entered on two 
> previous forms.
> 
> If it was me, I would have 3 separate actions and 3 separate 
> action-forms:
>    1. select-region
>    2. select-stores
>    3. confirm-dialog
> 
> The confirm-dialog ActionForm would contain both the region 
> information 
> and the list of stores.  Thus I would only use one ActionForm per 
> Action, and I wouldn't use session variables.
> 
> Bill
> 
> Martin Kindler wrote:
> 
> >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]
> >
> >
> >
> >  
> >
> 
> ---------------------------------------------------------------------
> 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