We ran into a problem when dealing with selectMany objects not
too long ago.  There is some incorrect code in the
getConvertedUISelectManyValue method which ends up causing
an ArrayStoreException (Trying to store an Object[] into an
entry in an Object[]).  This happens when we don't know the
object type we're dealing with.  The result prior to the
patch is a stack trace.

This patch fixes it.  BTW -- Some of this code in between
the 2 _SharedRendererUtils was not in sync.  It might be
nice to automate this so that they are never out-of-sync.

-- Jon



Index: share/src/java/org/apache/myfaces/renderkit/ _SharedRendererUtils.java
===================================================================
--- share/src/java/org/apache/myfaces/renderkit/ _SharedRendererUtils.java (revision 292567) +++ share/src/java/org/apache/myfaces/renderkit/ _SharedRendererUtils.java (working copy)
@@ -141,8 +141,10 @@
             // ...but have no idea of expected type
             // --> so let's convert it to an Object array
             int len = submittedValue.length;
-            Object [] convertedValues = (Object []) Array.newInstance(
- arrayComponentType==null?Object [].class:arrayComponentType,len);
+
+ //Object [] convertedValues = (Object []) Array.newInstance( + //arrayComponentType==null?Object [].class:arrayComponentType,len);
+            Object [] convertedValues = new Object[len];
             for (int i = 0; i < len; i++)
             {
                 convertedValues[i]
Index: api/src/java/javax/faces/component/_SharedRendererUtils.java
===================================================================
--- api/src/java/javax/faces/component/ _SharedRendererUtils.java (revision 292567) +++ api/src/java/javax/faces/component/ _SharedRendererUtils.java (working copy)
@@ -136,7 +136,8 @@
             // ...but have no idea of expected type
             // --> so let's convert it to an Object array
             int len = submittedValue.length;
- Object [] convertedValues = (Object []) Array.newInstance (arrayComponentType, len); + //Object [] convertedValues = (Object []) Array.newInstance(arrayComponentType, len);
+            Object[] convertedValues = new Object[len];
             for (int i = 0; i < len; i++)
             {
                 convertedValues[i]



Reply via email to