[ 
http://issues.apache.org/jira/browse/MYFACES-677?page=comments#action_12331586 
] 

Thomas A. Valletta commented on MYFACES-677:
--------------------------------------------

Yes.  I apologise for the poor explanation.  This would only occur if you have 
a converter on the component and are using SelectItemGroups.  The way that the 
code is currently, the "item" is a SelectItemGroup.  When item.getValue() is 
called an empty string is returned (that might be the bug).  Because there is a 
converter and the empty string is an instance of String, the converter is run 
against the SelectItemGroup.  That is where you will likely have conversion 
errors.  It is likely that any converter that will be applied to the component 
will not be expecting a SelectItemGroup.  Instead it will be expecting the 
object returned from item.getValue() where item is a SelectItem.

Hope this clarifies.
Tom

> HtmlSelectOneMenu conversion error with SelectItemGroup
> -------------------------------------------------------
>
>          Key: MYFACES-677
>          URL: http://issues.apache.org/jira/browse/MYFACES-677
>      Project: MyFaces
>         Type: Bug
>     Versions: 1.1.0
>  Environment: JRE 1.4.2_08 , Tomcat 4.1.27, Firefox
>     Reporter: Thomas A. Valletta
>     Assignee: Mathias Broekelmann

>
> While attempting to match the selected SelectItem for an HtmlSelectOneMenu, 
> the matchValue method of SelectItemsUtil calls the getConvertedValue method 
> before checking to see if the SelectItem is really a SelectItemGroup.  This 
> causes conversion errors.  If the SelectItem.getValue() is null (I think that 
> it was before MyFaces1.1) then it would not call the getConvertedValue.  But 
> now you get one ConversionException for every SelectItemGroup that has to be 
> checked before the matching SelectItem is found.
> Here is the method stack:
> _SelectItemsUtil.matchValue(FacesContext, Object, Iterator, 
> _SelectItemsUtil$_ValueConverter) line: 46
> HtmlSelectOneMenu(UISelectOne).validateValue(FacesContext, Object) line: 52
> HtmlSelectOneMenu(UIInput).validate(FacesContext) line: 269
> HtmlSelectOneMenu(UIInput).processValidators(FacesContext) line: 144
> Here is the method in MyFaces 1.1:
>     /**
>      * @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, _ValueConverter converter)
>     {
>         while (selectItemsIter.hasNext())
>         {
>             SelectItem item = (SelectItem) selectItemsIter.next();
>             Object itemValue = item.getValue();
>             if(converter != null && itemValue instanceof String)
>             {
>                 itemValue = converter.getConvertedValue(context, 
> (String)itemValue);
>             }
>             if (value.equals(itemValue))
>             {
>                 return true;
>             }
>             if (item instanceof SelectItemGroup)
>             {
>                 SelectItemGroup itemgroup = (SelectItemGroup) item;
>                 SelectItem[] selectItems = itemgroup.getSelectItems();
>                 if (selectItems != null
>                                 && selectItems.length > 0
>                                 && matchValue(context, value, Arrays.asList(
>                                                 selectItems).iterator(), 
> converter))
>                 {
>                     return true;
>                 }
>             }
>         }
>         return false;
>     }
> Thanks,
> Tom

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to