The method definitions were literally cut-and-paste from the spec.
There is no other code in the spec relating to indexed properties.
Arron.
Jason Chaffee wrote:
>The spec. supports the following:
>
>setFoo(int index, Object[] array)
>
>However, BeanUtils.populate() does not. The problem is that
>BeanUtils.populate() isn't checking if the second parameter is an array
>or not, it only checks the first parameter. However, the JavaBean spec.
>allows for the second paramter to be of an array type. If you try this,
>you will find that it doesn't work in struts1.0 or struts1.0.1 unless
>you make the change to the code that I suggested below. If you look at
>the code, the bug is very obivious.
>
>
> -----Original Message-----
> From: Arron Bates
> Sent: Sun 1/13/2002 11:31 PM
> To: Struts Users Mailing List
> Cc:
> Subject: Re: Bug in BeanUtils.populate()
>
>
>
> BeanUtils works correctly in that if you want to set against an
>index,
> you can have the following forms.
>
> Quoted from the bean spec --==>>
>
> void setter(int index, PropertyType value); // indexed setter
> PropertyType getter(int index); // indexed getter
>
> void setter(PropertyType values[]); // array setter
> PropertyType[] getter(); // array getter
>
> ...so it's either setting and getting an entire array
>collection, or
> directly setting and getting objects against an index which can
>mean
> absolutely anything internally to the bean. The BeanUtils class
>uses
> separate code blocks to handle both.
>
> Builds as of a few days ago will accept implementations of
> java.util.List as well as the primitive arrays the spec defines.
>
> I think the ones you're after are the array methods.
>
> Arron.
>
> >It appears there is a bug in BeanUtils.populate() for an
>indexed setter
> >of array type. It doesn't take into account that it is an
>indexed
> >setter and that the second parameter is an array because it
>only checks
> >the first parameter which is always an int for an indexed
>setter. This
> >is the code in the 1.0.1 release:
> >
> > ...
> > Class parameterType = parameterTypes[0];
> > if (parameterTypes.length > 1)
> > parameterType = parameterTypes[1]; //
>Indexed
> >setter
> > // Convert the parameter value as required for this
>setter
> >method
> > Object parameters[] = new Object[1];
> > if (parameterTypes[0].isArray()) {
> > ...
> >
> >it should be as follows:
> >
> > ...
> > Class parameterType = parameterTypes[0];
> > if (parameterTypes.length > 1)
> > parameterType = parameterTypes[1]; //
>Indexed
> >setter
> > // Convert the parameter value as required for this
>setter
> >method
> > Object parameters[] = new Object[1];
> > if (parameterType.isArray()) {
> > ...
> >
> >
>
>
>
> --
> 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]>
>
> winmail.dat
>
> Content-Type:
>
> application/ms-tnef
> Content-Encoding:
>
> base64
>
>
> ------------------------------------------------------------------------
> Part 1.3
>
> Content-Type:
>
> text/plain
>
>
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>