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