struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Diego Manilla Suárez <diego.mani...@xeridia.com>
Subject Re: Problems initializing form objects
Date Tue, 14 Dec 2004 15:58:45 GMT
Thanks a lot for your answers, Andrew. I think I can't use a LazyList. 
The problem is that I don't only need to know the size of the list 
dynamically, but also the type of its objects. All of them share a 
common interface, but their concrete class is unknown beforehand, so I 
can't make the list grow automatically.

I've been also suggested to extend RequestProcessor, overriding 
processPopulate to perform proper initialization before calling 
RequestUtils.populate(), and thus before BeanUtils.populate(). What do 
you think about this?

Andrew Hill wrote:

> The problem here is the need to be able to populate the form from a 
> submission. Initialising it in the action before forwarding to the 
> view is okay when rendering the page to the browser, but when 
> interpreting the forms submission, struts is going to instantiate the 
> new actionform instance (its request scoped I presume), call its 
> reset(), and then try to populate it, before any action is invoked.
>
> The only place to initialise the size of the list so populate will 
> work is in the reset() method, however its naughty to connect to the 
> database (to find out the required size) from here.
>
> My first suggestion was to use a lazy list. Thats probably the best 
> way, but another simple method would be to write the size of the list 
> to a hidden field in the html. Then it will be sent back in the 
> submitted request. You can then check that in the reset() method using 
> getParameter().
> ie (at its simplest), in reset() :
>
> int size = Integer.parseInt( request.getParameter("myListSize") );
> this.propertyValues = new ArrayList(size);
>
> Ummm. I was having another look at that wiki link I sent. Its notable 
> that their example provides an indexed getter. You may also need to do 
> something like that, but I dont recall the details :-(
>
>
> Jeff Beal wrote:
>
>> When I have this sort of thing, I usually put it in an "initializer" 
>> Action that I always link to in place of the JSP.
>>
>> <action path="initPage" name="BasicContentForm" validate="false" 
>> type="com.example.InitAction">
>>   <!-- This action populates the form -->
>>   <forward path="page.jsp" redirect="false" name="success" />
>> </action>
>> <action path="processPage" name="BasicContentForm" validate="true" 
>> input="initPage.do" ...>
>>   <!-- this action processes the form -->
>> </action>
>>
>> -- Jeff
>>
>> Diego Manilla Suárez wrote:
>>
>>> Hi! I have a problem with form members initialization.
>>>
>>> I have this form.
>>>
>>> public class BasicContentForm extends ValidatorForm {
>>>
>>>    protected java.util.List propertyValues;
>>>      public BasicContentForm() {
>>>        this.propertyValues = new java.util.ArrayList();
>>>    }
>>>      public void setPropertyValues( java.util.List propertyValues ) {
>>>        this.propertyValues = propertyValues;
>>>    }        public java.util.List getPropertyValues() {
>>>        return this.propertyValues;
>>>    }
>>>      public Object getPropertyValue(int index) {
>>>        return propertyValues.get(index);
>>>    }
>>>      public void reset(ActionMapping mapping, HttpServletRequest 
>>> request) {
>>>        this.propertyValues = new java.util.ArrayList();
>>>    }
>>> }
>>>
>>> And this jsp:
>>>
>>> <logic:iterate name="basicContentForm" property="propertyValues" 
>>> id="propertyValue">
>>> <html:text name="propertyValue" property="value" indexed="true"/>
>>> </logic:iterate>
>>>
>>> The problem is that the number and type of the elements of 
>>> propertyValues list is calculated dynamically (from the database). I 
>>> was doing that on my Action class, but I've realized that this 
>>> doesn't work: when I submit the form, I get an Exception at 
>>> BeanUtils.populate, because the list is not properly initialized. If 
>>> I can't initialize it on the reset() method (I need to access the 
>>> database), what else can I do?
>>>
>>> Thanks in advance
>>
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>> For additional commands, e-mail: user-help@struts.apache.org
>>
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Mime
View raw message