You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by mm...@apache.org on 2005/08/29 06:11:44 UTC

svn commit: r264055 - /myfaces/share/trunk/src/java/org/apache/myfaces/renderkit/RendererUtils.java

Author: mmarinschek
Date: Sun Aug 28 21:11:39 2005
New Revision: 264055

URL: http://svn.apache.org/viewcvs?rev=264055&view=rev
Log:
Fix for MYFACES-425. Thanks to Ken Weiner for supplying this patch.

Modified:
    myfaces/share/trunk/src/java/org/apache/myfaces/renderkit/RendererUtils.java

Modified: myfaces/share/trunk/src/java/org/apache/myfaces/renderkit/RendererUtils.java
URL: http://svn.apache.org/viewcvs/myfaces/share/trunk/src/java/org/apache/myfaces/renderkit/RendererUtils.java?rev=264055&r1=264054&r2=264055&view=diff
==============================================================================
--- myfaces/share/trunk/src/java/org/apache/myfaces/renderkit/RendererUtils.java (original)
+++ myfaces/share/trunk/src/java/org/apache/myfaces/renderkit/RendererUtils.java Sun Aug 28 21:11:39 2005
@@ -344,7 +344,34 @@
         if (List.class.isAssignableFrom(valueType))
         {
             //According to API Doc of UISelectMany the assumed entry type for a List is String
-            //--> no converter needed
+            //--> so basically no converter needed
+
+            // However, if the List contains something other than Strings, we can attempt
+            // to find a suitable converter. In JDK 1.4, we can try to find out what the List
+            // contains by looking at the SelectItem value of the first item. With generics in
+            // JDK 1.5, it would be much easier to determine the type.
+
+            List selectItems = RendererUtils.internalGetSelectItemList(component);
+
+            if (selectItems != null && selectItems.size() > 0)
+            {
+                SelectItem selectItem = (SelectItem) selectItems.get(0);
+                Class listComponentType = selectItem.getValue().getClass();
+
+                if (!(String.class.equals(listComponentType)))
+                {
+                    try
+                    {
+                        return facesContext.getApplication().createConverter(listComponentType);
+                    }
+                    catch (FacesException e)
+                    {
+                        log.error("No Converter for type " + listComponentType.getName() + " found", e);
+                        return null;
+                    }
+                }
+            }
+
             return null;
         }