Rick, I just read your post on this question and wanted to share how I handle this. Whenever I have a page with a dynamic dropdown list, I set validate to false for the action that I am submitting to in struts-config.xml. Then in my action, I call the validate method on the ActionForm that I get.
AddEmployeeForm myForm = (AddEmployeeForm)form; ActionErrors errors = myForm.validate(mapping, request); if (errors.empty()) { //work with the submitted data } else { //recreate dynamic lists as collections and put them in the request. saveErrors(request,errors); // so <html:errors/> can display them return new ActionForward(mapping.getInput()); //forward back to the submitting jsp page } Jacques > -----Original Message----- > From: Rick Reumann [mailto:[EMAIL PROTECTED]] > Sent: Tuesday, February 11, 2003 10:48 AM > To: Struts Users Mailing List > Cc: [EMAIL PROTECTED] > Subject: Re: still wondering Re: Where to repopulate dynamic lists ? > > > Sorry Craig to e-mail you directly but this topic has been up for a > while and I'd really be curious on your take on this. (I'm working on > struts demo and I don't mislead others by doing something 'wrong'). > > To recap I'm wondering what is the best practice for repopulating a > dynamic list that a user would need on a form. For example possibly it's > a form where a user has to select from a list of"Order Numbers"(which > could frequently change and could be based on the user logged in). The > way I currently tackle this is in the setUpForm type of action a > business object is called which returns to me this list and puts the > list into request scope to be used on the form. The problem is when the > user submits the form and validation returns false. Somewhere this list > needs to be repopulated. I could of course put this list (or even the > form bean) into session scope, but I thought that was to be avoided > since the only thing this list is used for is this one page. To solve > this problem I've been calling this business object to get my list in > the reset() method and putting it back into scope. I've heard others say > this is a bad idea(although I'm not sure why) and yet I haven't really > heard any other'much better' solutions. > > Some comments below on Mitchell's last post.. > > On Tue, 11 Feb 2003 10:20:52 -0500 > "Mitchell Morris" <[EMAIL PROTECTED]> wrote: > > > > > #1) Create a custom tag library to share an application-wide > > > > cached value of the order list, and populate the list into scope: > > [snip] > > > > > > This is probably a pretty good solution, although doesn't this go > > > against the thought of all the objects to display should be set > > > up before you even reach the JSP page? Basically now your JSP > > > page is doing business logic. > > > > Ooooh ... philosophical purity! I seen some of that once! I'm not > > entirely sure where the objection lies here, because the view object > > (JSP) isn't directly manipulating the model object (order list), but > > rather is intermediated by a controller object (tag library). Seems to > > me the MVC purity is being maintained. On the other hand, I might be > > wrong. At least it isn't a scriptlet. > > Trust me I'm not against using a tag to do it in the JSP page, I'm just > wondering how this is any "more pure/better" than just setting the list > back up in the reset method? > > > > One solution I thought might work is every time the list was > > > updated to > > > the db I'd make sure to get a new cached copy and put that into > > > application scope which all the user's cold have. This would > > > be a great > > > option except this list could be very specific to a > > > particular user- it > > > wouldn't work well in application scope because of this since > > > the lists > > > could vary depending on the user logged in. > > > > Well, you could certainly go with this scheme even in a user-specific > > case. The tag library would need to interact with the other model > > objects in session scope to coordinate the user's identity and thus to > > extract/cache the correct order list. It's starting to look icky, > > though, so you might now like choice #2 better. > > Yes, very icky I think. Better would be for each user's session to hold > this list data or repopulate this list (where/when?) before getting > back to the form upon validation errors. > > > > > #2) Have an Action populate the list into the Form before > > > > forwarding to the display page. The chain starts with your action, > > > > which can implement your desired caching scheme for the list of > > > > orders, then displays the JSP. The JSP submits back to an action, > > > > which > > > can restart > > > > the cycle. > > > > > > That's currently what I do but the problem I'm running into is when > > > validation returns false. How/where is the list going to be > > > repopulated > > > before it returns back to the jsp form page? The reset method > > > seems like > > > the best place but maybe I'm wrong? > > <snip> > > > This means that I've been wrong all along, and the options collection > > shouldn't have been in the form at all, but should be in session > > scope. I'd still have the action->jsp->action chain, but the first > > action should make sure the correct list object is in session scope > > instead of putting it into the form. > > Yes, actually I never did put the list into the form bean but had > initially put the list in request scope. Now we've come full circle:) > We're back to the beginning where it seems the choices seem to come down > to: > > 1) putting the list into session scope (the list will reset when the > user hits the setUpAction on another request to do this type of action). > > or > > 2) put the list into request scope and repopulate this list when reset > is called. > > > > > -- > Rick Reumann > > --------------------------------------------------------------------- > 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]