Я заполняю <p:selectOneMenu/> из базы данных следующим образом.
<p:selectOneMenu id="cmbCountry" 
                 value="#{bean.country}"
                 required="true"
                 converter="#{countryConverter}">
    <f:selectItem itemLabel="Select" itemValue="#{null}"/>
    <f:selectItems var="country"
                   value="#{bean.countries}"
                   itemLabel="#{country.countryName}"
                   itemValue="#{country}"/>
    <p:ajax update="anotherMenu" listener=/>
</p:selectOneMenu>
<p:message for="cmbCountry"/>
По умолчанию выбранная опция, когда эта страница загружена,
<f:selectItem itemLabel="Select" itemValue="#{null}"/>
Конвертер:
@ManagedBean
@ApplicationScoped
public final class CountryConverter implements Converter {
    @EJB
    private final Service service = null;
    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        try {
            //Returns the item label of <f:selectItem>
            System.out.println("value = " + value);
            if (!StringUtils.isNotBlank(value)) {
                return null;
            } // Makes no difference, if removed.
            long parsedValue = Long.parseLong(value);
            if (parsedValue <= 0) {
                throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "Message"));
            }
            Country entity = service.findCountryById(parsedValue);
            if (entity == null) {
                throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_WARN, "", "Message"));
            }
            return entity;
        } catch (NumberFormatException e) {
            throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "", "Message"), e);
        }
    }
    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        return value instanceof Country ? ((Country) value).getCountryId().toString() : null;
    }
}
Когда выбран первый элемент из меню, представленный <f:selectItem>, и форма отправляется затем, value, полученный в методе getAsObject(), равен Select, который является меткой <f:selectItem> - первой элемент в списке, который интуитивно не ожидается вообще.
Когда атрибут itemValue <f:selectItem> установлен в пустую строку, он выдает java.lang.NumberFormatException: For input string: "" в методе getAsObject(), даже если исключение точно поймано и зарегистрировано для ConverterException.
Кажется, что это работает, когда инструкция return getAsString() изменена с
return value instanceof Country?((Country)value).getCountryId().toString():null;
к
return value instanceof Country?((Country)value).getCountryId().toString():"";
 null заменяется пустой строкой, но возвращает пустую строку, когда объект, о котором идет речь, null, в свою очередь, несет другую проблему, как показано здесь.
Как сделать такие преобразователи работоспособными?
  Также попытался с org.omnifaces.converter.SelectItemsConverter, но это не имело значения.
