You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Paul Devine (JIRA)" <de...@myfaces.apache.org> on 2007/04/26 23:39:15 UTC

[jira] Commented: (MYFACES-1328) UISelectOne and UISelectMany fail with custom converter that returns java.lang.String from getAsObject() method.

    [ https://issues.apache.org/jira/browse/MYFACES-1328?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12492118 ] 

Paul Devine commented on MYFACES-1328:
--------------------------------------

This comment is not intended as a bug report of any kind, but might other users with a possible 1.1.5 upgrade problem. In upgrading to 1.1.5 the faces validation phase was causing the lifecycle to exit on some of our pages that were working just fine in 1.1.3.   It turns out we were relying on the conversion discussed above, because our pages used selectOneRadio's in a manner illustrated below :

<h:selectOneRadio value="#{myBean.someBooleanProperty}" converter="javax.faces.Boolean"  ...>
  <f:selectItem itemValue="true" itemLabel="Yes" />
  <f:selectItem itemValue="false" itemLabel="No"/>
</h:selectOneRadio>

The _SelectItemsUtil.matchValue method in myfaces prior to 1.1.5 would handle this by converting the "true" and "false" on the fly to Boolean.TRUE and Boolean.FALSE because we specified the BooleanConverter. The validation phase would be ok with the submitted values and the whole lifecycle would complete right through the action method.  The code change to _SelectItemsUtil.matchValue methodfor 1.1.5 no longer does the conversion, so the validation phase basically says the submitted value is not one of the values in the selection items, so causes the lifecycle to exit without executing the action method.

As the change made to Myfaces brings it in line with the spec, our jsp-code was not compatible with the spec, so we will change our jsp accordingly. Now we are like this:
<h:selectOneRadio value="#{myBean.someBooleanProperty}" converter="javax.faces.Boolean"  ...>
  <f:selectItems value="#{myBean.yesNoSelectItems}"/>
</h:selectOneRadio>

getYesNoSelectItems() returns SelectItem[]  , each whose item value is  Boolean object.


> UISelectOne and UISelectMany fail with custom converter that returns java.lang.String from getAsObject() method.
> ----------------------------------------------------------------------------------------------------------------
>
>                 Key: MYFACES-1328
>                 URL: https://issues.apache.org/jira/browse/MYFACES-1328
>             Project: MyFaces Core
>          Issue Type: Bug
>    Affects Versions: 1.1.4-SNAPSHOT
>            Reporter: Alexey Maslov
>         Assigned To: Martin Marinschek
>             Fix For: 1.1.5
>
>         Attachments: reproducer.zip
>
>
> The problem seems to be in javax.faces.component._SelectItemsUtil.matchValue(FacesContext context, Object value, Iterator selectItemsIter, _ValueConverter converter) method.
> Line 63-72:
>                 Object itemValue = item.getValue();
>                 if(converter != null && itemValue instanceof String)
>                 {
>                     itemValue = converter.getConvertedValue(context, (String)itemValue);
>                 }
>                 if (value==itemValue || value.equals(itemValue))
>                 {
>                     return true;
>                 }
> If item's value is java.lang.String then this code does duplicate conversion making matchValue() return false and subsequently resulting in error in calling method (validateValue() in javax.faces.component.UISelectOne and javax.faces.component.UISelectMany).

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.