You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Martin Grebac <ma...@sun.com> on 2002/09/27 15:16:52 UTC

Re: again ArrayList and javax.servlet.ServletException: BeanUtils .populate exception

Yes, I built everything anew, and also restarted server. I forgot to 
mention I'm using Struts 1.0.2 (but I think it's not relevant). Since 
Mohan has almost the same problem and everything we are using seems to 
be OK for you, and also according to the documentation it should work, I 
assume this is a bug. I'm gonna enter it into bugzilla, but it's rather 
serious for me, because I don't have any workaround for that.
   Martin

thorsten_soebirk@agilent.com wrote:

>What you have there looks right, so silly question (maybe): have you reloaded the web application after recompiling the ModulePathForm class?
>
>- Thorsten
>
>  
>
>>-----Original Message-----
>>From: Martin Grebac [mailto:martin.grebac@sun.com]
>>Sent: 27 September 2002 13:32
>>To: Struts Users Mailing List
>>Subject: Re: again ArrayList and javax.servlet.ServletException:
>>BeanUtils .populate exception
>>
>>
>>  No, it doesn't work also. I get the same exception everytime.
>>
>>  I want to have the possibility to select multiple folders, so I did 
>>what you suggested: added property selectedFolders of type 
>>String[], so 
>>I added this code to my ModulePathForm:
>>
>>    private String[] selectedFolders;
>>
>>    public String getSelectedFolders(int index) {
>>        return this.selectedFolders[index];
>>    }
>>   
>>    public String[] getSelectedFolders() {
>>        return this.selectedFolders;
>>    }
>>   
>>    public void setSelectedFolders(int index, String 
>>selectedFolders) {
>>        this.selectedFolders[index] = selectedFolders;
>>    }
>>   
>>    public void setSelectedFolders(String[] selectedFolders) {
>>        this.selectedFolders = selectedFolders;
>>    }
>>
>>and the jsp page looks the same as you wrote:
>>
>>   <html:select property="selectedFolders" multiple="true">
>>      <html:options property="folders"/>
>>   </html:select>
>>
>> I really don't know where is the problem. Really appreciate 
>>any other 
>>hints.
>> 
>> Thanks,
>>  Martin
>>
>>
>>
>>thorsten_soebirk@agilent.com wrote:
>>
>>    
>>
>>>Hi,
>>>
>>>I think the problem is that your <html:select...> and 
>>>      
>>>
>><html:options...> tags both reference the "folders" property. 
>>Judging by your code, the <html:options...> tag is doing what 
>>you expect i.e. getting the list of folders the user can 
>>select from. However, your <html:select...> tag is telling 
>>Struts to try to assign the selected folder back to the form 
>>bean by calling setFolders (albeit indirectly via 
>>BeanUtils.populate), but setFolders is expecting an ArrayList 
>>rather than  a single item from a list which your submit is 
>>sending back as a String.
>>    
>>
>>>I suspect what you need to do is introduce an additional 
>>>      
>>>
>>property called e.g. selectedFolder into your form bean. Your 
>>jsp would then look like this:
>>    
>>
>>>  <html:select property="selectedFolder" multiple="true">
>>>    <html:options property="folders"/>
>>>  </html:select>
>>>
>>>...and you will need corresponding setter and getter methods 
>>>      
>>>
>>in the bean. You can then also have getSelectedFolder() 
>>return a default value.
>>    
>>
>>>Regards,
>>>Thorsten
>>>
>>> 
>>>
>>>      
>>>
>>>>Hi,
>>>> I'm looking for any hint or advice. I've got code like this 
>>>>on my jsp 
>>>>page:
>>>>
>>>> <html:select property="folders" multiple="true">
>>>>   <html:options property="folders"/>
>>>> </html:select>
>>>>
>>>>property "folders" is a property of my "ModulePathForm" bean:
>>>>
>>>>/* ModulePathForm.java */
>>>>public class ModulePathForm extends ActionForm{
>>>>
>>>>   private ArrayList folders;
>>>>
>>>>   public ModulePathForm() {
>>>>       super();
>>>>       folders = new ArrayList();
>>>>   }
>>>>
>>>>   public ArrayList getFolders() {
>>>>       return this.folders;
>>>>   }
>>>>  
>>>>   public void setFolders(ArrayList folders) {
>>>>       this.folders = folders;
>>>>   }
>>>>}
>>>>
>>>>the values from the bean are shown, but when I click Submit, 
>>>>I get this 
>>>>exception:
>>>>
>>>>javax.servlet.ServletException: BeanUtils.populate
>>>>	at 
>>>>org.apache.struts.util.RequestUtils.populate(RequestUtils.java:774)
>>>>	at 
>>>>org.apache.struts.action.ActionServlet.processPopulate(ActionS
>>>>ervlet.java:2061)
>>>>	at 
>>>>org.apache.struts.action.ActionServlet.process(ActionServlet.j
>>>>ava:1563)
>>>>	at 
>>>>org.apache.struts.action.ActionServlet.doPost(ActionServlet.
>>>>        
>>>>
>>java:509)
>>    
>>
>>>>.....
>>>>root cause:
>>>>
>>>>java.lang.IllegalArgumentException: argument type mismatch
>>>>   
>>>>
>>>>        
>>>>
>>>--
>>>To unsubscribe, e-mail:   
>>>      
>>>
><ma...@jakarta.apache.org>
>  
>
>>For additional commands, e-mail: <ma...@jakarta.apache.org>
>>
>>    
>>
>
>
>--
>To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
>For additional commands, e-mail: <ma...@jakarta.apache.org>
>  
>


--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: about ArrayList and the BeanUtils.populate() exception ?

Posted by Martin Grebac <ma...@sun.com>.
Hi,
 could you send pieces of your code? It still doesn't work for me ;O(
Thanks,
  Martin

Vincent Berruchon wrote:

> No exception if you replace your ArrayList by a String[] (for the 
> properties used by the select tag).
>
>
> Vincent Berruchon wrote:
>
>> I get a "BeanUtils.populate() exception" when a form with a multiple 
>> select is posted (with struts 1.0.2, Martin reported this Bug a few 
>> days ago - bugzilla bug id #: 13075) :
>> "javax.servlet.ServletException: BeanUtils.populate
>>     at 
>> org.apache.struts.util.RequestUtils.populate(RequestUtils.java:774)
>> ..."
>>
>> I don't know if it can have a link, but I'm not sure to understand 
>> this warning about the "select" tag ( in 
>> webapps/struts-documentation/struts-html.html#select):
>> -
>> WARNING: In order to correctly recognize cases where no selection at 
>> all is made, the ActionForm bean associated with this form must 
>> include a statement resetting the scalar property to a default value 
>> (if multiple is not set), or the array property to zero length (if 
>> multiple is set) in the reset() method.
>> -
>>
>> So in my formBean, in the reset() method I've put:
>> " this.selectedValues = new ArrayList(); "
>> instead of
>> "this.selectedValues = null; "
>>
>> But I'm not sure it really respect the warning??
>> What mean "a zero length ArrayList":
>>  not null I suppose...
>>  should I use the other constructor :  "new ArrayList(0)" ?
>>
>> This is the first point.
>> But in fact, all that got no influence on this populate exception 
>> with multiple select.
>> Is there another way to do with a "multiple select"?
>>
>> Thanks
>> Vincent
>>
>> Martin Grebac wrote:
>>
>>> Hi,
>>> so here is the Bugid:
>>>
>>>
>>>    13075
>>>
>>> . May I expect something's gonna happen with it, or will it die in 
>>> the deeps of the bug database ;O))
>>>
>>> Martin
>>>
>>>
>>> Martin Grebac wrote:
>>>
>>>> Yes, I built everything anew, and also restarted server. I forgot 
>>>> to mention I'm using Struts 1.0.2 (but I think it's not relevant). 
>>>> Since Mohan has almost the same problem and everything we are using 
>>>> seems to be OK for you, and also according to the documentation it 
>>>> should work, I assume this is a bug. I'm gonna enter it into 
>>>> bugzilla, but it's rather serious for me, because I don't have any 
>>>> workaround for that.
>>>>   Martin
>>>>
>>>> thorsten_soebirk@agilent.com wrote:
>>>>
>>>>> What you have there looks right, so silly question (maybe): have 
>>>>> you reloaded the web application after recompiling the 
>>>>> ModulePathForm class?
>>>>>
>>>>> - Thorsten
>>>>>
>>>>>  
>>>>>
>>>>>> -----Original Message-----
>>>>>> From: Martin Grebac [mailto:martin.grebac@sun.com]
>>>>>> Sent: 27 September 2002 13:32
>>>>>> To: Struts Users Mailing List
>>>>>> Subject: Re: again ArrayList and javax.servlet.ServletException:
>>>>>> BeanUtils .populate exception
>>>>>>
>>>>>>
>>>>>>  No, it doesn't work also. I get the same exception everytime.
>>>>>>
>>>>>>  I want to have the possibility to select multiple folders, so I 
>>>>>> did what you suggested: added property selectedFolders of type 
>>>>>> String[], so I added this code to my ModulePathForm:
>>>>>>
>>>>>>    private String[] selectedFolders;
>>>>>>
>>>>>>    public String getSelectedFolders(int index) {
>>>>>>        return this.selectedFolders[index];
>>>>>>    }
>>>>>>      public String[] getSelectedFolders() {
>>>>>>        return this.selectedFolders;
>>>>>>    }
>>>>>>      public void setSelectedFolders(int index, String 
>>>>>> selectedFolders) {
>>>>>>        this.selectedFolders[index] = selectedFolders;
>>>>>>    }
>>>>>>      public void setSelectedFolders(String[] selectedFolders) {
>>>>>>        this.selectedFolders = selectedFolders;
>>>>>>    }
>>>>>>
>>>>>> and the jsp page looks the same as you wrote:
>>>>>>
>>>>>>   <html:select property="selectedFolders" multiple="true">
>>>>>>      <html:options property="folders"/>
>>>>>>   </html:select>
>>>>>>
>>>>>> I really don't know where is the problem. Really appreciate any 
>>>>>> other hints.
>>>>>>
>>>>>> Thanks,
>>>>>>  Martin
>>>>>>
>>>>>>
>>>>>>
>>>>>> thorsten_soebirk@agilent.com wrote:
>>>>>>
>>>>>>  
>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> I think the problem is that your <html:select...> and     
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> <html:options...> tags both reference the "folders" property. 
>>>>>> Judging by your code, the <html:options...> tag is doing what you 
>>>>>> expect i.e. getting the list of folders the user can select from. 
>>>>>> However, your <html:select...> tag is telling Struts to try to 
>>>>>> assign the selected folder back to the form bean by calling 
>>>>>> setFolders (albeit indirectly via BeanUtils.populate), but 
>>>>>> setFolders is expecting an ArrayList rather than  a single item 
>>>>>> from a list which your submit is sending back as a String.
>>>>>>  
>>>>>>
>>>>>>> I suspect what you need to do is introduce an additional     
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> property called e.g. selectedFolder into your form bean. Your jsp 
>>>>>> would then look like this:
>>>>>>  
>>>>>>
>>>>>>>  <html:select property="selectedFolder" multiple="true">
>>>>>>>    <html:options property="folders"/>
>>>>>>>  </html:select>
>>>>>>>
>>>>>>> ...and you will need corresponding setter and getter methods     
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> in the bean. You can then also have getSelectedFolder() return a 
>>>>>> default value.
>>>>>>  
>>>>>>
>>>>>>> Regards,
>>>>>>> Thorsten
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>  
>>>>>>>
>>>>>>>> Hi,
>>>>>>>> I'm looking for any hint or advice. I've got code like this on 
>>>>>>>> my jsp page:
>>>>>>>>
>>>>>>>> <html:select property="folders" multiple="true">
>>>>>>>>   <html:options property="folders"/>
>>>>>>>> </html:select>
>>>>>>>>
>>>>>>>> property "folders" is a property of my "ModulePathForm" bean:
>>>>>>>>
>>>>>>>> /* ModulePathForm.java */
>>>>>>>> public class ModulePathForm extends ActionForm{
>>>>>>>>
>>>>>>>>   private ArrayList folders;
>>>>>>>>
>>>>>>>>   public ModulePathForm() {
>>>>>>>>       super();
>>>>>>>>       folders = new ArrayList();
>>>>>>>>   }
>>>>>>>>
>>>>>>>>   public ArrayList getFolders() {
>>>>>>>>       return this.folders;
>>>>>>>>   }
>>>>>>>>  
>>>>>>>>   public void setFolders(ArrayList folders) {
>>>>>>>>       this.folders = folders;
>>>>>>>>   }
>>>>>>>> }
>>>>>>>>
>>>>>>>> the values from the bean are shown, but when I click Submit, I 
>>>>>>>> get this exception:
>>>>>>>>
>>>>>>>> javax.servlet.ServletException: BeanUtils.populate
>>>>>>>>     at 
>>>>>>>> org.apache.struts.util.RequestUtils.populate(RequestUtils.java:774) 
>>>>>>>>
>>>>>>>>     at 
>>>>>>>> org.apache.struts.action.ActionServlet.processPopulate(ActionS
>>>>>>>> ervlet.java:2061)
>>>>>>>>     at 
>>>>>>>> org.apache.struts.action.ActionServlet.process(ActionServlet.j
>>>>>>>> ava:1563)
>>>>>>>>     at org.apache.struts.action.ActionServlet.doPost(ActionServlet.
>>>>>>>>       
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>> java:509)
>>>>>>  
>>>>>>
>>>>>>>> .....
>>>>>>>> root cause:
>>>>>>>>
>>>>>>>> java.lang.IllegalArgumentException: argument type mismatch
>>>>>>>>  
>>>>>>>>       
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> -- 
>>>>>>> To unsubscribe, e-mail:       
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>> <ma...@jakarta.apache.org>
>>>>>  
>>>>>
>>>>>> For additional commands, e-mail: 
>>>>>> <ma...@jakarta.apache.org>
>>>>>>
>>>>>>   
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> -- 
>>>>> To unsubscribe, e-mail:   
>>>>> <ma...@jakarta.apache.org>
>>>>> For additional commands, e-mail: 
>>>>> <ma...@jakarta.apache.org>
>>>>>  
>>>>>
>>>>
>>>>
>>>> -- 
>>>> To unsubscribe, e-mail:   
>>>> <ma...@jakarta.apache.org>
>>>> For additional commands, e-mail: 
>>>> <ma...@jakarta.apache.org>
>>>
>>>
>>>
>>>
>>>
>>
>>
>>
>> -- 
>> To unsubscribe, e-mail:   
>> <ma...@jakarta.apache.org>
>> For additional commands, e-mail: 
>> <ma...@jakarta.apache.org>
>>
>>
>>
>
>
>
> --
> To unsubscribe, e-mail:   
> <ma...@jakarta.apache.org>
> For additional commands, e-mail: 
> <ma...@jakarta.apache.org>



--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: about ArrayList and the BeanUtils.populate() exception ?

Posted by Vincent Berruchon <vi...@neo-logism.fr>.
No exception if you replace your ArrayList by a String[] (for the 
properties used by the select tag).


Vincent Berruchon wrote:
> I get a "BeanUtils.populate() exception" when a form with a multiple 
> select is posted (with struts 1.0.2, Martin reported this Bug a few days 
> ago - bugzilla bug id #: 13075) :
> "javax.servlet.ServletException: BeanUtils.populate
>     at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:774)
> ..."
> 
> I don't know if it can have a link, but I'm not sure to understand this 
> warning about the "select" tag ( in 
> webapps/struts-documentation/struts-html.html#select):
> -
> WARNING: In order to correctly recognize cases where no selection at all 
> is made, the ActionForm bean associated with this form must include a 
> statement resetting the scalar property to a default value (if multiple 
> is not set), or the array property to zero length (if multiple is set) 
> in the reset() method.
> -
> 
> So in my formBean, in the reset() method I've put:
> " this.selectedValues = new ArrayList(); "
> instead of
> "this.selectedValues = null; "
> 
> But I'm not sure it really respect the warning??
> What mean "a zero length ArrayList":
>  not null I suppose...
>  should I use the other constructor :  "new ArrayList(0)" ?
> 
> This is the first point.
> But in fact, all that got no influence on this populate exception with 
> multiple select.
> Is there another way to do with a "multiple select"?
> 
> Thanks
> Vincent
> 
> Martin Grebac wrote:
> 
>> Hi,
>> so here is the Bugid:
>>
>>
>>    13075
>>
>> . May I expect something's gonna happen with it, or will it die in the 
>> deeps of the bug database ;O))
>>
>> Martin
>>
>>
>> Martin Grebac wrote:
>>
>>> Yes, I built everything anew, and also restarted server. I forgot to 
>>> mention I'm using Struts 1.0.2 (but I think it's not relevant). Since 
>>> Mohan has almost the same problem and everything we are using seems 
>>> to be OK for you, and also according to the documentation it should 
>>> work, I assume this is a bug. I'm gonna enter it into bugzilla, but 
>>> it's rather serious for me, because I don't have any workaround for 
>>> that.
>>>   Martin
>>>
>>> thorsten_soebirk@agilent.com wrote:
>>>
>>>> What you have there looks right, so silly question (maybe): have you 
>>>> reloaded the web application after recompiling the ModulePathForm 
>>>> class?
>>>>
>>>> - Thorsten
>>>>
>>>>  
>>>>
>>>>> -----Original Message-----
>>>>> From: Martin Grebac [mailto:martin.grebac@sun.com]
>>>>> Sent: 27 September 2002 13:32
>>>>> To: Struts Users Mailing List
>>>>> Subject: Re: again ArrayList and javax.servlet.ServletException:
>>>>> BeanUtils .populate exception
>>>>>
>>>>>
>>>>>  No, it doesn't work also. I get the same exception everytime.
>>>>>
>>>>>  I want to have the possibility to select multiple folders, so I 
>>>>> did what you suggested: added property selectedFolders of type 
>>>>> String[], so I added this code to my ModulePathForm:
>>>>>
>>>>>    private String[] selectedFolders;
>>>>>
>>>>>    public String getSelectedFolders(int index) {
>>>>>        return this.selectedFolders[index];
>>>>>    }
>>>>>      public String[] getSelectedFolders() {
>>>>>        return this.selectedFolders;
>>>>>    }
>>>>>      public void setSelectedFolders(int index, String 
>>>>> selectedFolders) {
>>>>>        this.selectedFolders[index] = selectedFolders;
>>>>>    }
>>>>>      public void setSelectedFolders(String[] selectedFolders) {
>>>>>        this.selectedFolders = selectedFolders;
>>>>>    }
>>>>>
>>>>> and the jsp page looks the same as you wrote:
>>>>>
>>>>>   <html:select property="selectedFolders" multiple="true">
>>>>>      <html:options property="folders"/>
>>>>>   </html:select>
>>>>>
>>>>> I really don't know where is the problem. Really appreciate any 
>>>>> other hints.
>>>>>
>>>>> Thanks,
>>>>>  Martin
>>>>>
>>>>>
>>>>>
>>>>> thorsten_soebirk@agilent.com wrote:
>>>>>
>>>>>  
>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> I think the problem is that your <html:select...> and     
>>>>>
>>>>>
>>>>>
>>>>> <html:options...> tags both reference the "folders" property. 
>>>>> Judging by your code, the <html:options...> tag is doing what you 
>>>>> expect i.e. getting the list of folders the user can select from. 
>>>>> However, your <html:select...> tag is telling Struts to try to 
>>>>> assign the selected folder back to the form bean by calling 
>>>>> setFolders (albeit indirectly via BeanUtils.populate), but 
>>>>> setFolders is expecting an ArrayList rather than  a single item 
>>>>> from a list which your submit is sending back as a String.
>>>>>  
>>>>>
>>>>>> I suspect what you need to do is introduce an additional     
>>>>>
>>>>>
>>>>>
>>>>> property called e.g. selectedFolder into your form bean. Your jsp 
>>>>> would then look like this:
>>>>>  
>>>>>
>>>>>>  <html:select property="selectedFolder" multiple="true">
>>>>>>    <html:options property="folders"/>
>>>>>>  </html:select>
>>>>>>
>>>>>> ...and you will need corresponding setter and getter methods     
>>>>>
>>>>>
>>>>>
>>>>> in the bean. You can then also have getSelectedFolder() return a 
>>>>> default value.
>>>>>  
>>>>>
>>>>>> Regards,
>>>>>> Thorsten
>>>>>>
>>>>>>
>>>>>>
>>>>>>   
>>>>>>
>>>>>>> Hi,
>>>>>>> I'm looking for any hint or advice. I've got code like this on my 
>>>>>>> jsp page:
>>>>>>>
>>>>>>> <html:select property="folders" multiple="true">
>>>>>>>   <html:options property="folders"/>
>>>>>>> </html:select>
>>>>>>>
>>>>>>> property "folders" is a property of my "ModulePathForm" bean:
>>>>>>>
>>>>>>> /* ModulePathForm.java */
>>>>>>> public class ModulePathForm extends ActionForm{
>>>>>>>
>>>>>>>   private ArrayList folders;
>>>>>>>
>>>>>>>   public ModulePathForm() {
>>>>>>>       super();
>>>>>>>       folders = new ArrayList();
>>>>>>>   }
>>>>>>>
>>>>>>>   public ArrayList getFolders() {
>>>>>>>       return this.folders;
>>>>>>>   }
>>>>>>>  
>>>>>>>   public void setFolders(ArrayList folders) {
>>>>>>>       this.folders = folders;
>>>>>>>   }
>>>>>>> }
>>>>>>>
>>>>>>> the values from the bean are shown, but when I click Submit, I 
>>>>>>> get this exception:
>>>>>>>
>>>>>>> javax.servlet.ServletException: BeanUtils.populate
>>>>>>>     at 
>>>>>>> org.apache.struts.util.RequestUtils.populate(RequestUtils.java:774)
>>>>>>>     at 
>>>>>>> org.apache.struts.action.ActionServlet.processPopulate(ActionS
>>>>>>> ervlet.java:2061)
>>>>>>>     at 
>>>>>>> org.apache.struts.action.ActionServlet.process(ActionServlet.j
>>>>>>> ava:1563)
>>>>>>>     at org.apache.struts.action.ActionServlet.doPost(ActionServlet.
>>>>>>>       
>>>>>>
>>>>>>
>>>>>>
>>>>> java:509)
>>>>>  
>>>>>
>>>>>>> .....
>>>>>>> root cause:
>>>>>>>
>>>>>>> java.lang.IllegalArgumentException: argument type mismatch
>>>>>>>  
>>>>>>>       
>>>>>>
>>>>>>
>>>>>>
>>>>>> -- 
>>>>>> To unsubscribe, e-mail:       
>>>>>
>>>>>
>>>>>
>>>> <ma...@jakarta.apache.org>
>>>>  
>>>>
>>>>> For additional commands, e-mail: 
>>>>> <ma...@jakarta.apache.org>
>>>>>
>>>>>   
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> -- 
>>>> To unsubscribe, e-mail:   
>>>> <ma...@jakarta.apache.org>
>>>> For additional commands, e-mail: 
>>>> <ma...@jakarta.apache.org>
>>>>  
>>>>
>>>
>>>
>>> -- 
>>> To unsubscribe, e-mail:   
>>> <ma...@jakarta.apache.org>
>>> For additional commands, e-mail: 
>>> <ma...@jakarta.apache.org>
>>
>>
>>
>>
> 
> 
> 
> -- 
> To unsubscribe, e-mail:   
> <ma...@jakarta.apache.org>
> For additional commands, e-mail: 
> <ma...@jakarta.apache.org>
> 
> 
> 



--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


about ArrayList and the BeanUtils.populate() exception ?

Posted by Vincent Berruchon <vi...@neo-logism.fr>.
I get a "BeanUtils.populate() exception" when a form with a multiple 
select is posted (with struts 1.0.2, Martin reported this Bug a few days 
ago - bugzilla bug id #: 13075) :
"javax.servlet.ServletException: BeanUtils.populate
	at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:774)
..."

I don't know if it can have a link, but I'm not sure to understand this 
warning about the "select" tag ( in 
webapps/struts-documentation/struts-html.html#select):
-
WARNING: In order to correctly recognize cases where no selection at all 
is made, the ActionForm bean associated with this form must include a 
statement resetting the scalar property to a default value (if multiple 
is not set), or the array property to zero length (if multiple is set) 
in the reset() method.
-

So in my formBean, in the reset() method I've put:
" this.selectedValues = new ArrayList(); "
instead of
"this.selectedValues = null; "

But I'm not sure it really respect the warning??
What mean "a zero length ArrayList":
  not null I suppose...
  should I use the other constructor :  "new ArrayList(0)" ?

This is the first point.
But in fact, all that got no influence on this populate exception with 
multiple select.
Is there another way to do with a "multiple select"?

Thanks
Vincent

Martin Grebac wrote:
> Hi,
> so here is the Bugid:
> 
> 
>    13075
> 
> . May I expect something's gonna happen with it, or will it die in the 
> deeps of the bug database ;O))
> 
> Martin
> 
> 
> Martin Grebac wrote:
> 
>> Yes, I built everything anew, and also restarted server. I forgot to 
>> mention I'm using Struts 1.0.2 (but I think it's not relevant). Since 
>> Mohan has almost the same problem and everything we are using seems to 
>> be OK for you, and also according to the documentation it should work, 
>> I assume this is a bug. I'm gonna enter it into bugzilla, but it's 
>> rather serious for me, because I don't have any workaround for that.
>>   Martin
>>
>> thorsten_soebirk@agilent.com wrote:
>>
>>> What you have there looks right, so silly question (maybe): have you 
>>> reloaded the web application after recompiling the ModulePathForm class?
>>>
>>> - Thorsten
>>>
>>>  
>>>
>>>> -----Original Message-----
>>>> From: Martin Grebac [mailto:martin.grebac@sun.com]
>>>> Sent: 27 September 2002 13:32
>>>> To: Struts Users Mailing List
>>>> Subject: Re: again ArrayList and javax.servlet.ServletException:
>>>> BeanUtils .populate exception
>>>>
>>>>
>>>>  No, it doesn't work also. I get the same exception everytime.
>>>>
>>>>  I want to have the possibility to select multiple folders, so I did 
>>>> what you suggested: added property selectedFolders of type String[], 
>>>> so I added this code to my ModulePathForm:
>>>>
>>>>    private String[] selectedFolders;
>>>>
>>>>    public String getSelectedFolders(int index) {
>>>>        return this.selectedFolders[index];
>>>>    }
>>>>      public String[] getSelectedFolders() {
>>>>        return this.selectedFolders;
>>>>    }
>>>>      public void setSelectedFolders(int index, String 
>>>> selectedFolders) {
>>>>        this.selectedFolders[index] = selectedFolders;
>>>>    }
>>>>      public void setSelectedFolders(String[] selectedFolders) {
>>>>        this.selectedFolders = selectedFolders;
>>>>    }
>>>>
>>>> and the jsp page looks the same as you wrote:
>>>>
>>>>   <html:select property="selectedFolders" multiple="true">
>>>>      <html:options property="folders"/>
>>>>   </html:select>
>>>>
>>>> I really don't know where is the problem. Really appreciate any 
>>>> other hints.
>>>>
>>>> Thanks,
>>>>  Martin
>>>>
>>>>
>>>>
>>>> thorsten_soebirk@agilent.com wrote:
>>>>
>>>>  
>>>>
>>>>> Hi,
>>>>>
>>>>> I think the problem is that your <html:select...> and     
>>>>
>>>>
>>>> <html:options...> tags both reference the "folders" property. 
>>>> Judging by your code, the <html:options...> tag is doing what you 
>>>> expect i.e. getting the list of folders the user can select from. 
>>>> However, your <html:select...> tag is telling Struts to try to 
>>>> assign the selected folder back to the form bean by calling 
>>>> setFolders (albeit indirectly via BeanUtils.populate), but 
>>>> setFolders is expecting an ArrayList rather than  a single item from 
>>>> a list which your submit is sending back as a String.
>>>>  
>>>>
>>>>> I suspect what you need to do is introduce an additional     
>>>>
>>>>
>>>> property called e.g. selectedFolder into your form bean. Your jsp 
>>>> would then look like this:
>>>>  
>>>>
>>>>>  <html:select property="selectedFolder" multiple="true">
>>>>>    <html:options property="folders"/>
>>>>>  </html:select>
>>>>>
>>>>> ...and you will need corresponding setter and getter methods     
>>>>
>>>>
>>>> in the bean. You can then also have getSelectedFolder() return a 
>>>> default value.
>>>>  
>>>>
>>>>> Regards,
>>>>> Thorsten
>>>>>
>>>>>
>>>>>
>>>>>    
>>>>>
>>>>>> Hi,
>>>>>> I'm looking for any hint or advice. I've got code like this on my 
>>>>>> jsp page:
>>>>>>
>>>>>> <html:select property="folders" multiple="true">
>>>>>>   <html:options property="folders"/>
>>>>>> </html:select>
>>>>>>
>>>>>> property "folders" is a property of my "ModulePathForm" bean:
>>>>>>
>>>>>> /* ModulePathForm.java */
>>>>>> public class ModulePathForm extends ActionForm{
>>>>>>
>>>>>>   private ArrayList folders;
>>>>>>
>>>>>>   public ModulePathForm() {
>>>>>>       super();
>>>>>>       folders = new ArrayList();
>>>>>>   }
>>>>>>
>>>>>>   public ArrayList getFolders() {
>>>>>>       return this.folders;
>>>>>>   }
>>>>>>  
>>>>>>   public void setFolders(ArrayList folders) {
>>>>>>       this.folders = folders;
>>>>>>   }
>>>>>> }
>>>>>>
>>>>>> the values from the bean are shown, but when I click Submit, I get 
>>>>>> this exception:
>>>>>>
>>>>>> javax.servlet.ServletException: BeanUtils.populate
>>>>>>     at 
>>>>>> org.apache.struts.util.RequestUtils.populate(RequestUtils.java:774)
>>>>>>     at org.apache.struts.action.ActionServlet.processPopulate(ActionS
>>>>>> ervlet.java:2061)
>>>>>>     at org.apache.struts.action.ActionServlet.process(ActionServlet.j
>>>>>> ava:1563)
>>>>>>     at org.apache.struts.action.ActionServlet.doPost(ActionServlet.
>>>>>>       
>>>>>
>>>>>
>>>> java:509)
>>>>  
>>>>
>>>>>> .....
>>>>>> root cause:
>>>>>>
>>>>>> java.lang.IllegalArgumentException: argument type mismatch
>>>>>>  
>>>>>>       
>>>>>
>>>>>
>>>>> -- 
>>>>> To unsubscribe, e-mail:       
>>>>
>>>>
>>> <ma...@jakarta.apache.org>
>>>  
>>>
>>>> For additional commands, e-mail: 
>>>> <ma...@jakarta.apache.org>
>>>>
>>>>   
>>>
>>>
>>>
>>>
>>> -- 
>>> To unsubscribe, e-mail:   
>>> <ma...@jakarta.apache.org>
>>> For additional commands, e-mail: 
>>> <ma...@jakarta.apache.org>
>>>  
>>>
>>
>>
>> -- 
>> To unsubscribe, e-mail:   
>> <ma...@jakarta.apache.org>
>> For additional commands, e-mail: 
>> <ma...@jakarta.apache.org>
> 
> 
> 



--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: again ArrayList and javax.servlet.ServletException: BeanUtils .populate exception

Posted by Eddie Bush <ek...@swbell.net>.
It will be examined and addressed in due time.  If you have time to "get 
hacking on it" (wrt the source that is) and happen to be able to fix it, 
you should attach a "diff -u" of your changes to the bug so that it can 
be easily patched by a committer.

Martin Grebac wrote:

> Hi,
> so here is the Bugid:
>
>
>    13075
>
> . May I expect something's gonna happen with it, or will it die in the 
> deeps of the bug database ;O))
>
> Martin 


-- 
Eddie Bush




--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: again ArrayList and javax.servlet.ServletException: BeanUtils .populate exception

Posted by Martin Grebac <ma...@sun.com>.
Hi,
 so here is the Bugid:


    13075

. May I expect something's gonna happen with it, or will it die in the 
deeps of the bug database ;O))

Martin


Martin Grebac wrote:

> Yes, I built everything anew, and also restarted server. I forgot to 
> mention I'm using Struts 1.0.2 (but I think it's not relevant). Since 
> Mohan has almost the same problem and everything we are using seems to 
> be OK for you, and also according to the documentation it should work, 
> I assume this is a bug. I'm gonna enter it into bugzilla, but it's 
> rather serious for me, because I don't have any workaround for that.
>   Martin
>
> thorsten_soebirk@agilent.com wrote:
>
>> What you have there looks right, so silly question (maybe): have you 
>> reloaded the web application after recompiling the ModulePathForm class?
>>
>> - Thorsten
>>
>>  
>>
>>> -----Original Message-----
>>> From: Martin Grebac [mailto:martin.grebac@sun.com]
>>> Sent: 27 September 2002 13:32
>>> To: Struts Users Mailing List
>>> Subject: Re: again ArrayList and javax.servlet.ServletException:
>>> BeanUtils .populate exception
>>>
>>>
>>>  No, it doesn't work also. I get the same exception everytime.
>>>
>>>  I want to have the possibility to select multiple folders, so I did 
>>> what you suggested: added property selectedFolders of type String[], 
>>> so I added this code to my ModulePathForm:
>>>
>>>    private String[] selectedFolders;
>>>
>>>    public String getSelectedFolders(int index) {
>>>        return this.selectedFolders[index];
>>>    }
>>>      public String[] getSelectedFolders() {
>>>        return this.selectedFolders;
>>>    }
>>>      public void setSelectedFolders(int index, String selectedFolders) {
>>>        this.selectedFolders[index] = selectedFolders;
>>>    }
>>>      public void setSelectedFolders(String[] selectedFolders) {
>>>        this.selectedFolders = selectedFolders;
>>>    }
>>>
>>> and the jsp page looks the same as you wrote:
>>>
>>>   <html:select property="selectedFolders" multiple="true">
>>>      <html:options property="folders"/>
>>>   </html:select>
>>>
>>> I really don't know where is the problem. Really appreciate any 
>>> other hints.
>>>
>>> Thanks,
>>>  Martin
>>>
>>>
>>>
>>> thorsten_soebirk@agilent.com wrote:
>>>
>>>   
>>>
>>>> Hi,
>>>>
>>>> I think the problem is that your <html:select...> and     
>>>
>>> <html:options...> tags both reference the "folders" property. 
>>> Judging by your code, the <html:options...> tag is doing what you 
>>> expect i.e. getting the list of folders the user can select from. 
>>> However, your <html:select...> tag is telling Struts to try to 
>>> assign the selected folder back to the form bean by calling 
>>> setFolders (albeit indirectly via BeanUtils.populate), but 
>>> setFolders is expecting an ArrayList rather than  a single item from 
>>> a list which your submit is sending back as a String.
>>>   
>>>
>>>> I suspect what you need to do is introduce an additional     
>>>
>>> property called e.g. selectedFolder into your form bean. Your jsp 
>>> would then look like this:
>>>   
>>>
>>>>  <html:select property="selectedFolder" multiple="true">
>>>>    <html:options property="folders"/>
>>>>  </html:select>
>>>>
>>>> ...and you will need corresponding setter and getter methods     
>>>
>>> in the bean. You can then also have getSelectedFolder() return a 
>>> default value.
>>>   
>>>
>>>> Regards,
>>>> Thorsten
>>>>
>>>>
>>>>
>>>>     
>>>>
>>>>> Hi,
>>>>> I'm looking for any hint or advice. I've got code like this on my 
>>>>> jsp page:
>>>>>
>>>>> <html:select property="folders" multiple="true">
>>>>>   <html:options property="folders"/>
>>>>> </html:select>
>>>>>
>>>>> property "folders" is a property of my "ModulePathForm" bean:
>>>>>
>>>>> /* ModulePathForm.java */
>>>>> public class ModulePathForm extends ActionForm{
>>>>>
>>>>>   private ArrayList folders;
>>>>>
>>>>>   public ModulePathForm() {
>>>>>       super();
>>>>>       folders = new ArrayList();
>>>>>   }
>>>>>
>>>>>   public ArrayList getFolders() {
>>>>>       return this.folders;
>>>>>   }
>>>>>  
>>>>>   public void setFolders(ArrayList folders) {
>>>>>       this.folders = folders;
>>>>>   }
>>>>> }
>>>>>
>>>>> the values from the bean are shown, but when I click Submit, I get 
>>>>> this exception:
>>>>>
>>>>> javax.servlet.ServletException: BeanUtils.populate
>>>>>     at 
>>>>> org.apache.struts.util.RequestUtils.populate(RequestUtils.java:774)
>>>>>     at org.apache.struts.action.ActionServlet.processPopulate(ActionS
>>>>> ervlet.java:2061)
>>>>>     at org.apache.struts.action.ActionServlet.process(ActionServlet.j
>>>>> ava:1563)
>>>>>     at org.apache.struts.action.ActionServlet.doPost(ActionServlet.
>>>>>       
>>>>
>>> java:509)
>>>   
>>>
>>>>> .....
>>>>> root cause:
>>>>>
>>>>> java.lang.IllegalArgumentException: argument type mismatch
>>>>>  
>>>>>       
>>>>
>>>> --
>>>> To unsubscribe, e-mail:       
>>>
>> <ma...@jakarta.apache.org>
>>  
>>
>>> For additional commands, e-mail: 
>>> <ma...@jakarta.apache.org>
>>>
>>>   
>>
>>
>>
>> --
>> To unsubscribe, e-mail:   
>> <ma...@jakarta.apache.org>
>> For additional commands, e-mail: 
>> <ma...@jakarta.apache.org>
>>  
>>
>
>
> --
> To unsubscribe, e-mail:   
> <ma...@jakarta.apache.org>
> For additional commands, e-mail: 
> <ma...@jakarta.apache.org>