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

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

I don't think that there is anything in JSF that keeps you from putting a value 
into a SelectitemGroup, but I know that the optgroup HTML element has no 
attribute for a value.  The HTML spec does not allow for an optgroup to be 
selected either.  So if a SelectItemGroup can be selected, it would be for 
rederkits that are not HTML.  

Either way, it wouldn't matter if the SelectItemGroup is selected, the 
conversion should still be skipped.  

Thanks for your help on this.
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