You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Leonardo Uribe (JIRA)" <de...@myfaces.apache.org> on 2010/12/01 17:01:15 UTC

[jira] Updated: (MYFACES-2927) Invalid handling of null values in listboxes and menus

     [ https://issues.apache.org/jira/browse/MYFACES-2927?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Leonardo Uribe updated MYFACES-2927:
------------------------------------

       Resolution: Fixed
    Fix Version/s: 2.0.3-SNAPSHOT
         Assignee: Leonardo Uribe
           Status: Resolved  (was: Patch Available)

I checked it and it is correct. Just one small note, to work correctly it requires:

org.apache.myfaces.ENUM_CONVERTER_ALLOW_STRING_PASSTROUGH

param set to true to work as expected (otherwise it will thrown an exception because the String is not a Enum value).

I did a test on mojarra 2.0.3 and it seems there h:selectOneMenu does not call getAsString on the example, but in my opinion myfaces is doing right, always calling it and instead using a param to control this behavior.

Thanks to Christian Kaltepoth for provide this patch.

> Invalid handling of null values in listboxes and menus
> ------------------------------------------------------
>
>                 Key: MYFACES-2927
>                 URL: https://issues.apache.org/jira/browse/MYFACES-2927
>             Project: MyFaces Core
>          Issue Type: Bug
>          Components: General
>    Affects Versions: 2.0.1
>            Reporter: Christian Kaltepoth
>            Assignee: Leonardo Uribe
>             Fix For: 2.0.3-SNAPSHOT
>
>         Attachments: MYFACES-2927.patch
>
>
> I discovered that MyFaces doesn't seem to handle null values correctly in listboxes and menus.
> See the following example showing a h:selectOneMenu used to select an enum value:
>   @ManagedBean
>   @RequestScoped
>   public class TestBean {
>      public enum Level {
>         HIGH, MEDIUM, LOW
>      }
>      private Level level;
>      public String action() {
>         FacesContext.getCurrentInstance().addMessage(null, 
>               new FacesMessage("Submitted level: " + level));
>         return null;
>      }
>   }
> And the following view:
>   <h:selectOneMenu value="#{testBean.level}" label="Level">
>     <f:selectItem itemValue="#{null}" itemLabel="Unknown"/>
>     <f:selectItem itemValue="HIGH"    itemLabel="High"/>
>     <f:selectItem itemValue="MEDIUM"  itemLabel="Medium"/>
>     <f:selectItem itemValue="LOW"     itemLabel="Level"/>
>   </h:selectOneMenu>
>   <h:commandButton action="#{testBean.action}" value="Go"/>
> Clicking the "Go" button will result in the validation error: "Level: 'Unknown' must be convertible to an enum."
> If the value of the select item is null, MyFaces won't render the value attribute of the option and so the browser will submit the label as its value:
>   <select id="levelForm:level" name="levelForm:level" size="1">	
>     <option selected="selected">Unknown</option>	
>     <option value="HIGH">High</option>	
>     <option value="MEDIUM">Medium</option>	
>     <option value="LOW">Level</option>
>   </select>
> Mojarra instead renders an empty value attribute in this situation:
>   <option value="" selected="selected">Unknown</option>
> I've created a patch fixing this issue against the current trunk of myfaces-shared and attached it to this ticket.
> You can see the sample application reproducing this issue here:
> http://github.com/chkal/myfaces-tests/tree/menu-null-value
> And download it here:
> http://github.com/chkal/myfaces-tests/archives/menu-null-value

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