I’ve done this a half dozen times so I know it’s possible. I just can’t remember how.
I would like to initialize a property of a Struts 1 ActionForm with data from the user’s HttpSession object, but only when the form is first created. Actually don’t worry too much about the fact that it comes from HttpSession, important is just the fact that the data is dynamic, per-user, and should only be initialized once.
Additionally, if the user changes the data in this field, the user’s entry should persist. In other words, when the user first sees the form they will see the initialized data. If they then change the field and submit the form (by calling the associated action) and subsequently come back to this form later, they should see THEIR entry in that field.
Obviously initializing the field in struts-config.xml won’t work because the data is dynamic and per-user. Same can be said for the form’s constructor. I see the reset() method of ActionForm will be called to reset properties to a default state, but I don’t remember if it is called before the first time the form is loaded and displayed in the page. I suppose if it is that’s an option, but I would only want it to do the initialization on the first call. That sounds just mildly complicated (I would need a boFirstTime member variable flag or something?).
Can anyone help?
What I ended up doing was overriding reset() of ActionForm, and setting the desired property only if it is null or blank. The property I needed to initialize is represented in the class member variable _strMailTo (yeah I know nobody but me uses the underscores for member variables anymore).
It turns out that reset() is also called before the ActionForm properties are used for the first time to populate the fields of the form for the associated Action. In this way the first time the user sees the form the my pre-populated data is there. But if they change it and later land on the form again they see the text they put in the field the last time they submitted the form.
I guess maybe I’m also the only one still using Struts 1 anymore…