[RESOLVIDO] Converter recebe descritivo ao invés do código/<p:SelectOneMenu> não carrega value corretamente

Estou carregando uma lista de objetos do tipo TgrupoVerbas num p:selectOneMenu

No xhtml:

								<p:selectOneMenu id="tipoVerba"
									value="#{tverbaBean.tverbas.tipoVerba}">
									<f:selectItem itemLabel="Selecione" />
									<f:selectItems value="#{tverbaBean.listSelect}" />
								</p:selectOneMenu>

no MB:

//CARREGA SELECTONEMENU
public List<SelectItem> getListSelect() {
	
	if(this.listSelect == null){						
		
		listSelect = new ArrayList<SelectItem>();
		
		TgrupoVerbasRN tgrupoVerbasRN = new TgrupoVerbasRN();			
		List<TgrupoVerbas> tgruposLista = tgrupoVerbasRN.listar();
		
		if(tgruposLista != null && !tgruposLista.isEmpty()){
			SelectItem item;
			
			for(TgrupoVerbas itemLista : tgruposLista){
				
				item = new SelectItem(itemLista, itemLista.getiGrupoVerba());						
				listSelect.add(item);
				
			}
		}
	}
	
	return listSelect;
}

Converter:

@FacesConverter(forClass = TgrupoVerbas.class)
public class TgrupoVerbasConverter implements Converter{

@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
	if (value != null && value.trim().length() > 0){
		Integer codigo = Integer.valueOf(value);
		try {
			TgrupoVerbasRN tgrupoVerbasRN = new TgrupoVerbasRN();
			return tgrupoVerbasRN.buscarPorCodigo(codigo);
			
		} catch (Exception e) {
			throw new ConverterException("Não foi possível encontrar o registro pelo código: " + value + "Erro: " + e.getMessage());
		}
	}
	return null;
}

@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {

	if(value != null) {
		TgrupoVerbas tgrupoVerbas = (TgrupoVerbas) value;								
		return tgrupoVerbas.getiGrupoVerba().toString();
	}
	
	return "";
}

}

Quando eu aciono o “salvar” na tela, o Converter é chamado no método getAsObject(FacesContext context, UIComponet component, String value)

Mas esse “value” está vindo o descritivo[“Salário”] e não o código[1], o que ocasiona uma exceção na conversão Integer codigo = Integer.valueOf(value);

Já verifiquei em vários tópicos e vídeos tutoriais, mas não identifiquei nenhum erro no código. Como posso setar o id ao invés do descritivo?

Você pode definir o itemValue e itemLabel para o componente f:selectItems, quando não o faz, o mecanismo do JSF define a descrição para ambos.

Luiz Augusto, obrigado pela resposta.

Acabei esquecendo de mencionar na pergunta, mas eu estava usando itemValue e itemLabem logo antes de postar a pergunta, mesmo assim não havia diferença nenhuma, o converter continuava a receber o descritivo.

								<p:selectOneMenu id="tipoVerba"
									value="#{tverbaBean.tverbas.tipoVerba}">
									<f:selectItem itemLabel="Selecione" />
									<f:selectItems value="#{tverbaBean.listSelect}" var="grupo"
										itemValue="#{grupo.codGrupoVerba}"
										itemLabel="#{grupo.codGrupoVerba}" />
								</p:selectOneMenu>

itemLabel e itemValue estão iguais? Está certo isso?
E qual o html gerado?

Realmente, estava errado. O correto seria:

                               <p:selectOneMenu id="tipoVerba"
									value="#{tverbaBean.tverbas.tipoVerba}">
									<f:selectItem itemLabel="Selecione" />
									<f:selectItems value="#{tverbaBean.listSelect}" var="grupo"
										itemValue="#{grupo.codGrupoVerba}"
										itemLabel="#{grupo.iGrupoVerba}" />
								</p:selectOneMenu>

Estranhamente carrega corretamente em ambos os casos:

Ele parece estar ignorando essa definição no xhtml, e setando no combo a partir do Bean:

Creio que foi por isso que eu tinha retirado o itemValue e o itemLabel do xhtml.

Ainda assim, qual é o html gerado? Botão direito do mouse sobre o combo criado > inspecionar ou exibir código fonte

							<div class="form-group input-group">
								<span class="input-group-addon"> </span><div id="tverbaCadastro:tipoVerba" class="ui-selectonemenu ui-widget ui-state-default ui-corner-all"><div class="ui-helper-hidden-accessible"><input id="tverbaCadastro:tipoVerba_focus" name="tverbaCadastro:tipoVerba_focus" type="text" autocomplete="off" role="combobox" aria-haspopup="true" aria-expanded="false" aria-labelledby="tverbaCadastro:j_idt47" /></div><div class="ui-helper-hidden-accessible"><select id="tverbaCadastro:tipoVerba_input" name="tverbaCadastro:tipoVerba_input" tabindex="-1"><option value="" selected="selected">Selecione</option><option value="Benefícios Obrigatórios">Benefícios Obrigatórios</option><option value="Benefícios Facultativos">Benefícios Facultativos</option><option value="Salário">Salário</option></select></div><label id="tverbaCadastro:tipoVerba_label" class="ui-selectonemenu-label ui-inputfield ui-corner-all">&nbsp;</label><div class="ui-selectonemenu-trigger ui-state-default ui-corner-right"><span class="ui-icon ui-icon-triangle-1-s ui-c"></span></div><div id="tverbaCadastro:tipoVerba_panel" class="ui-selectonemenu-panel ui-widget ui-widget-content ui-corner-all ui-helper-hidden ui-shadow"><div class="ui-selectonemenu-items-wrapper" style="height:auto"><ul id="tverbaCadastro:tipoVerba_items" class="ui-selectonemenu-items ui-selectonemenu-list ui-widget-content ui-widget ui-corner-all ui-helper-reset" role="listbox"><li class="ui-selectonemenu-item ui-selectonemenu-list-item ui-corner-all" data-label="Selecione" tabindex="-1" role="option">Selecione</li><li class="ui-selectonemenu-item ui-selectonemenu-list-item ui-corner-all" data-label="Benefícios Obrigatórios" tabindex="-1" role="option">Benefícios Obrigatórios</li><li class="ui-selectonemenu-item ui-selectonemenu-list-item ui-corner-all" data-label="Benefícios Facultativos" tabindex="-1" role="option">Benefícios Facultativos</li><li class="ui-selectonemenu-item ui-selectonemenu-list-item ui-corner-all" data-label="Salário" tabindex="-1" role="option">Salário</li></ul></div></div></div><script id="tverbaCadastro:tipoVerba_s" type="text/javascript">$(function(){PrimeFaces.cw("SelectOneMenu","widget_tverbaCadastro_tipoVerba",{id:"tverbaCadastro:tipoVerba"});});</script>
							</div>

Entendi errado. Segue>

Ele ainda tá pegando o valor incorreto

<option value="Benefícios Obrigatórios">Benefícios Obrigatórios</option>

Analisando o código com o pessoal aqui do trabalho, conseguimos identificar o erro. O converter estava retornando o descritivo e não o código. Falta de atenção da minha parte.

Segue como ficou o converter {a linha comentada é onde estava o return errado}

public class TgrupoVerbasConverter implements Converter{

@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
	if (value != null && value.trim().length() > 0){
		Integer codigo = Integer.valueOf(value);
		try {
			TgrupoVerbasRN tgrupoVerbasRN = new TgrupoVerbasRN();
			return tgrupoVerbasRN.buscarPorCodigo(codigo);
			
		} catch (Exception e) {
			throw new ConverterException("Não foi possível encontrar o registro pelo código: " + value + "Erro: " + e.getMessage());
		}
	}
	return null;
}

@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {

	if(value != null) {
		TgrupoVerbas tgrupoVerbas = (TgrupoVerbas) value;		
		//return tgrupoVerbas.getiGrupoVerba().toString();			
		return String.valueOf(tgrupoVerbas.getCodGrupoVerba());
	}
	
	return "";
}

}

Mais uma vez obrigado aos que tentaram ajudar.

O converter estava retornando o campo errado, postei a resposta completa. Muito obrigado cara.