[
http://issues.apache.org/jira/browse/MYFACES-677?page=comments#action_12331597
]
Thomas A. Valletta commented on MYFACES-677:
--------------------------------------------
OK. I can see where it would be useful for converters to handle empty strings.
To require that every converter handle empty strings is another. But I will
concede this point.
However, I still see an issue with calling the converter on the
SelectItemGroup. Even if your converter does handle an empty string, it should
not be called to convert a SelectItemGroup.
So instead of changeing the code to this (previously proposed):
if(converter != null && itemValue instanceof String &&
((String)itemValue).length() != 0)
Change it to (something like this):
if(converter != null && itemValue instanceof String && !(item instanceof
SelectItemGroup))
> 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