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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]