It's not a secret anymore!
The moose likes Struts and the fly likes Perennial Prepopulation Question Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Frameworks » Struts
Bookmark "Perennial Prepopulation Question" Watch "Perennial Prepopulation Question" New topic

Perennial Prepopulation Question

Graham VMead
Ranch Hand

Joined: Sep 22, 2003
Posts: 154

Can someone tell me if this approach is "right" or there is a better way, its something which always gives me a headache when I use struts.

Say I have the situation where, I want to use request scope action forms.

JSP Screen 1 user enters some data
JSP Screen 2 Application outputs data based on entry on screen1.

Screen 1 will have an action mapped via the

So the Action casts the form passed to Screen1ActionForm(form)

Gets the data out of it screen1ActionForm.getXXXX()

To prepopulate the Screen2ActionForm

It has to

Create an instance of Screen2ActionForm

Populate it via setXXX methods

Put this instance into the correct scope
e.g request.setAttribute(Screen2ActionForm)

Return an ActionForward that maps to Screen2 JSP

What worries me about this approach is that not only does the Action need to know the Class of the ActionForm passed to it (Screen1ActionForm) it also has to know the Class of the Form used in the target jsp (Screen2ActionForm)!

Is this ok???
Merrill Higginson
Ranch Hand

Joined: Feb 15, 2005
Posts: 4864
Since the form bean and the JSP are inextricably tied to each other, I see no problem at all architecturally with the fact that if you forward to a JSP, you also have to know the name of and populate the form bean that is used by that JSP.

To keep things a little cleaner, though, I generally delegate logic for setting up a page to a class other than the action class so that I can re-use that logic if I have to set up and display that page again from another action form. That way, the action doesn't really have to know about the action form used by the second page. It just makes a call to another method that does know about it.

Another technique used by many Struts developers called "action chaining". Using this technique, you write a setup action and a process action for each page. The process action then decides which page to display next and then returns an ActionForward that points not to the JSP, but to the Setup Action for the page, which in turn points to the JSP.

This approach has other architectural problems, though, so I personally don't use it. Check out this thread for an interesting discussion on this topic.
[ December 18, 2005: Message edited by: Merrill Higginson ]

Consultant, Sima Solutions
I agree. Here's the link:
subject: Perennial Prepopulation Question
It's not a secret anymore!