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

svn commit: r279434 - in /myfaces/api/trunk/src/java/javax/faces/component: UISelectMany.java UISelectOne.java _SelectItemsUtil.java

Author: mbr
Date: Wed Sep  7 15:06:36 2005
New Revision: 279434

URL: http://svn.apache.org/viewcvs?rev=279434&view=rev
Log:
validation of submitted values fixed (caused problems if values where converted)

Modified:
    myfaces/api/trunk/src/java/javax/faces/component/UISelectMany.java
    myfaces/api/trunk/src/java/javax/faces/component/UISelectOne.java
    myfaces/api/trunk/src/java/javax/faces/component/_SelectItemsUtil.java

Modified: myfaces/api/trunk/src/java/javax/faces/component/UISelectMany.java
URL: http://svn.apache.org/viewcvs/myfaces/api/trunk/src/java/javax/faces/component/UISelectMany.java?rev=279434&r1=279433&r2=279434&view=diff
==============================================================================
--- myfaces/api/trunk/src/java/javax/faces/component/UISelectMany.java (original)
+++ myfaces/api/trunk/src/java/javax/faces/component/UISelectMany.java Wed Sep  7 15:06:36 2005
@@ -22,10 +22,10 @@
 import java.util.List;
 
 import javax.faces.application.FacesMessage;
+import javax.faces.component._SelectItemsUtil._ValueConverter;
 import javax.faces.context.FacesContext;
 import javax.faces.convert.ConverterException;
 import javax.faces.el.ValueBinding;
-import javax.faces.model.SelectItem;
 import javax.faces.render.Renderer;
 
 /**
@@ -256,6 +256,19 @@
                 setValid(false);
                 return;
             }
+            
+            _ValueConverter converter = new _ValueConverter()
+            {
+                public Object getConvertedValue(FacesContext context, String value)
+                {
+                    Object convertedValue = UISelectMany.this.getConvertedValue(context, new String[] {value});
+                    if(convertedValue != null)
+                    {
+                        return ((Object[])convertedValue)[0];
+                    }
+                    return null;
+                }
+            };
 
             if ( convertedValue instanceof Object[] ){ 
 	            Object[] values = (Object[]) convertedValue;
@@ -269,7 +282,7 @@
 	                for (int i = 0, size = values.length; i < size; i++)
 	                {
 	                    if (!_SelectItemsUtil.matchValue(context, values[i],
-	                                    items.iterator()))
+	                                    items.iterator(), converter))
 	                    {
 	                        _MessageUtils.addErrorMessage(context, this,
 	                                        INVALID_MESSAGE_ID,
@@ -290,7 +303,7 @@
 	                for (Iterator i = values.iterator(); i.hasNext();)
 	                {
 	                    if (!_SelectItemsUtil.matchValue(context, i.next(),
-	                                    items.iterator()))
+	                                    items.iterator(), converter))
 	                    {
 	                        _MessageUtils.addErrorMessage(context, this,
 	                                        INVALID_MESSAGE_ID,

Modified: myfaces/api/trunk/src/java/javax/faces/component/UISelectOne.java
URL: http://svn.apache.org/viewcvs/myfaces/api/trunk/src/java/javax/faces/component/UISelectOne.java?rev=279434&r1=279433&r2=279434&view=diff
==============================================================================
--- myfaces/api/trunk/src/java/javax/faces/component/UISelectOne.java (original)
+++ myfaces/api/trunk/src/java/javax/faces/component/UISelectOne.java Wed Sep  7 15:06:36 2005
@@ -15,6 +15,7 @@
  */
 package javax.faces.component;
 
+import javax.faces.component._SelectItemsUtil._ValueConverter;
 import javax.faces.context.FacesContext;
 
 /**
@@ -39,8 +40,16 @@
             return;
         }
 
+        _ValueConverter converter = new _ValueConverter()
+        {
+            public Object getConvertedValue(FacesContext context, String value)
+            {
+                return UISelectOne.this.getConvertedValue(context, value);
+            }
+        };
+
         // selected value must match to one of the available options
-        if (!_SelectItemsUtil.matchValue(context, value, new _SelectItemsIterator(this)))
+        if (!_SelectItemsUtil.matchValue(context, value, new _SelectItemsIterator(this), converter))
         {
             _MessageUtils.addErrorMessage(context, this, INVALID_MESSAGE_ID,
                             new Object[] {getId()});

Modified: myfaces/api/trunk/src/java/javax/faces/component/_SelectItemsUtil.java
URL: http://svn.apache.org/viewcvs/myfaces/api/trunk/src/java/javax/faces/component/_SelectItemsUtil.java?rev=279434&r1=279433&r2=279434&view=diff
==============================================================================
--- myfaces/api/trunk/src/java/javax/faces/component/_SelectItemsUtil.java (original)
+++ myfaces/api/trunk/src/java/javax/faces/component/_SelectItemsUtil.java Wed Sep  7 15:06:36 2005
@@ -28,19 +28,30 @@
  */
 class _SelectItemsUtil
 {
+    public static interface _ValueConverter
+    {
+        Object getConvertedValue(FacesContext context, String value);
+    }
+    
     /**
      * @param context the faces context
      * @param value the value to check
+     * @param converter 
      * @param iterator contains instances of SelectItem
      * @return if the value of a selectitem is equal to the given value
      */
     public static boolean matchValue(FacesContext context, Object value,
-                    Iterator selectItemsIter)
+                    Iterator selectItemsIter, _ValueConverter converter)
     {
         while (selectItemsIter.hasNext())
         {
             SelectItem item = (SelectItem) selectItemsIter.next();
-            if (value.equals(item.getValue()))
+            Object itemValue = item.getValue();
+            if(converter != null && itemValue instanceof String)
+            {
+                itemValue = converter.getConvertedValue(context, (String)itemValue);
+            }
+            if (value.equals(itemValue))
             {
                 return true;
             }
@@ -51,7 +62,7 @@
                 if (selectItems != null
                                 && selectItems.length > 0
                                 && matchValue(context, value, Arrays.asList(
-                                                selectItems).iterator()))
+                                                selectItems).iterator(), converter))
                 {
                     return true;
                 }