[ http://issues.apache.org/jira/browse/MYFACES-677?page=comments#action_12331594 ]
Mathias Broekelmann commented on MYFACES-677: --------------------------------------------- IMO it´s a problem with the converter. The converter could handle empty strings by simply returning null. If someone uses a complex object for the value and an empty string to indicate a null value he wouldn´t be able to use that if we don´t pass the empty string to the converter. > 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