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

Mathias Broekelmann commented on MYFACES-677:
---------------------------------------------

that´s much better. The only thing is that I´m not sure if a SelectItemGroup is 
not selectable in every case. 

> 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