Indexed properties are challenging to work with if the ActionForm is scoped to request. The problem is that once the page is sent to the browser, the nested properties of the ActionForm bean are all gone. When the user submits the page, Struts instantiates the ActionForm, but all the nested properties you so carefully placed in the bean before the page was displayed aren't there anymore.
Obviously, it's easier to just declare the ActionForm in session scope, but if you're concerned about not putting too much data in your HttpSession, there is still a workaround.
Here's the workaround that I sometimes use:
Obviously, it's easier to just declare the ActionForm in session scope, but if you're concerned about not putting too much data in your HttpSession, there is still a workaround.
Here's the workaround that I sometimes use:
- Save the minimal information you might need to reconstruct the beans or lists of beans in your ActionForm, such as the length of the List.
- Override the reset() method in your ActionForm to get this information from the HttpSession, and then reconstruct the nested beans. The properties of the beans can still all be blank, but the beans have to be instantiated. Struts calls the reset() method of the ActionForm before trying to populate its' properties, so if you do this, all the beans needed by the indexed getters and setters will be there when the accessor mehtods are called
- Use hidden fields in your JSP for information that needs to be in the bean, but isn't displayed on the page.