[ http://issues.apache.org/jira/browse/MYFACES-677?page=comments#action_12331532 ]
Thomas A. Valletta commented on MYFACES-677: -------------------------------------------- I added && ((String)itemValue).length() != 0 to the end of if(converter != null && itemValue instanceof String) so that it ended up looking like this: if(converter != null && itemValue instanceof String && ((String)itemValue).length() != 0) and it fixed the issue. > 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 > > 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