I got this error many time.. i am using two h:selectonemenu in my JSF page, mediaList and Unitlist. while selecting any Media . my UnitList populate automatically, but some time it gives Validation Error: value is not valid;
My JSF code
<h:selectOneMenu  id="media" value="#{workOrderMbean.selectedMedia}" converter="MediaConverter" onchange="submit()" valueChangeListener="#{workOrderMbean.onChangeMediaCombo}" immediate="true">
  <f:selectItems value="#{workOrderMbean.mediaCombo}"/>
</h:selectOneMenu>
<h:selectOneMenu id="hUnit" value="#{workOrderMbean.selectedHeightUnit}" converter="UnitConverter" >
  <f:selectItems value="#{workOrderMbean.unitCombo}"/>
</h:selectOneMenu>
onchane event of Mediacombo is
 public void onChangeMediaCombo(ValueChangeEvent e) throws SearchBLException {
        if (e.getNewValue() != null) {
            Media media = (Media) e.getNewValue();
            if (unitCombo != null && !unitCombo.isEmpty()) {
                unitCombo.clear();
                seclectedWidthUnit=new Unit();
               selectedHeightUnit=new Unit();
            }
            unitCombo = ComboLoader.getUnitsComboByMediaid(media.getMediaId());
        }
        else
        {
            if (unitCombo != null && !unitCombo.isEmpty()) {
                unitCombo.clear();
                seclectedWidthUnit=null;
                selectedHeightUnit=null;
            }
            unitCombo = ComboLoader.getUnitsComboByMediaid(-1);
        }
    }
i am also using converter for 'Unit'
my media converter is
@FacesConverter(value = "MediaConverter") public class MediaConverter implements Converter{
MediaDAO mediadao=new MediaDAOImpl();
public Object getAsObject(FacesContext context, UIComponent component, String value) {
    Media media=null;
    try {
        media=mediadao.getMedia(Integer.parseInt(value));
    } catch (SearchBLException ex) {
        Logger.getLogger(MediaConverter.class.getName()).log(Level.SEVERE, null, ex);
    }
    return media;
}
public String getAsString(FacesContext context, UIComponent component, Object value) {
    String str = "";
if (value instanceof Media) {
    str = "" + ((Media) value).getMediaId();
}
return str;
}
}
 
    