You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Christian Kaltepoth (JIRA)" <de...@myfaces.apache.org> on 2010/09/21 08:49:33 UTC

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

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


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.


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

Posted by "Christian Kaltepoth (JIRA)" <de...@myfaces.apache.org>.
     [ https://issues.apache.org/jira/browse/MYFACES-2927?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Christian Kaltepoth updated MYFACES-2927:
-----------------------------------------

    Status: Patch Available  (was: Open)

> 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
>
> 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.