public static void decodeUISelectMany(FacesContext facesContext, UIComponent component) { if (!(component instanceof EditableValueHolder)) { throw new IllegalArgumentException("Component " + component.getClientId(facesContext) + " is not an EditableValueHolder"); } Map paramValuesMap = facesContext.getExternalContext() .getRequestParameterValuesMap(); String clientId = component.getClientId(facesContext); if(isDisabledOrReadOnly(component)) return; if (paramValuesMap.containsKey(clientId)) { String[] reqValues = (String[]) paramValuesMap.get(clientId); ((EditableValueHolder) component).setSubmittedValue(reqValues); } else { /* request parameter not found, nothing to decode - set submitted value to an empty array as we should get here only if the component is on a submitted form, is rendered and if the component is not readonly or has not been disabled. So in fact, there must be component value at this location, but for listboxes, comboboxes etc. the submitted value is not posted if no item is selected. */ ((EditableValueHolder) component).setSubmittedValue( new String[]{}); } }