Ajuda Primefaces + AutoComplete - Retornar id de acordo com o nome selecionado

Bom dia galera, estou puxando de uma tabela do banco os valores para serem usados no componente autocomplete do primefaces
Por enquanto, ele esta puxando todos os dados corretamente, porém ele me retorna sempre a string, como fazer para q ele me retorne a id de acordo com o que eu seleciono?

segue meu codigo

xhtml

 <p:row>
                        <p:column>
                            <h:outputText value="#{msgs.CHAMADA_NATUREZA}" />
                        </p:column>
                        <p:column>
                            <p:autoComplete id="acNatureza" value="#{atendimentoTelefonicoMB.naturezaSelecionada}"
                            completeMethod="#{atendimentoTelefonicoMB.completaNat}" var="natureza"
                            itemLabel="#{natureza.sigla}" />

                        </p:column>
                    </p:row>

BEAN

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.sgs.limeira.controllers;

import br.com.sgs.limeira.models.ChamadaTelefonica;
import br.com.sgs.limeira.models.Natureza;
import br.com.sgs.limeira.servicos.FabricaServicos;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

/**
 *
 * @author Jilles Ragonha
 */
@ManagedBean
@RequestScoped
public class AtendimentoTelefonicoMB implements Serializable {

    private ChamadaTelefonica atendimento = new ChamadaTelefonica();
    private Natureza naturezaSelecionada;
    private List<Natureza> naturezas;

    public Natureza getNaturezaSelecionada() {
        return naturezaSelecionada;
    }

    public void setNaturezaSelecionada(Natureza naturezaSelecionada) {
        this.naturezaSelecionada = naturezaSelecionada;
    }

    public List<Natureza> getNaturezas() {
        return naturezas;
    }

    public void setNaturezas(List<Natureza> naturezas) {
        this.naturezas = naturezas;
    }

    public ChamadaTelefonica getAtendimento() {
        return atendimento;
    }

    public void setAtendimento(ChamadaTelefonica atendimento) {
        this.atendimento = atendimento;
    }

    public String novoAtendimento() {


        if (atendimento.getAnonimo().equals("Sim")) {
            atendimento.setAnonimo("s");
        } else if (atendimento.getAnonimo().equals("Nao")) {
            atendimento.setAnonimo("n");
        }


        FabricaServicos fabrica = new FabricaServicos();


        return fabrica.getServicoCadastro(FabricaServicos.ATENDIMENTO_TELEFONICO).cadastrar(atendimento);
    }

    public List<ChamadaTelefonica> consultarAtendimentos() {
        return null;

    }

    public List<ChamadaTelefonica> consultarAtendimentosAbertos() {
        return null;
    }

    public List<ChamadaTelefonica> consultarAtendimentosEncerrados() {
        return null;
    }

    public List<Natureza> completaNat(String query) {
        FabricaServicos fabrica = new FabricaServicos();
        this.naturezas = fabrica.getServicoConsulta(FabricaServicos.NATUREZA).consultarTodos();
        List<Natureza> sugestoes = new ArrayList<Natureza>();

        for (Natureza n : this.naturezas) {
            if (n.getDescricao().startsWith(query)) {
                sugestoes.add(n);
            }
        }
        return sugestoes;
    }
}

Crie um evento em Ajax para executar qdo selecionar o cara que vc quiser ligando a um método no Bean que faça a busca pelo OBJ selecionado …

Como faço …

estou tentando, hehe
mas por enquanto estou tendo um problema mto grande com meu converter

posta o converter cara

[code]@FacesConverter(value = “naturezaConverter”)
public class NaturezaConverters implements Converter {

public static List<Natureza> naturezas;

static {
    FabricaServicos fabrica = new FabricaServicos();
    naturezas = fabrica.getServicoConsulta(FabricaServicos.NATUREZA).consultarTodos();
}

@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
    
    Natureza natur = new Natureza();
    for (Natureza n : naturezas) {
    int codigo = Integer.parseInt(value);
        if (n.getCodigo() == codigo) {
            natur = n;
        }
    }
    return natur;
}

[/code]

reparei q o value do meu converter esta vindo vazio("")
:frowning:

alterado meu converter para esse post ae de cima

Cara … olhe a diferença pra um converter que funfa …

[code]@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
if (value != null && value.trim().length() > 0) {

	Long codigo = Long.valueOf(value);
	try {
		GrupoRepository repository = new GrupoRepository(getEntityManager());
		GrupoUsuario grupo = repository.grupoPorID(codigo); 
		return grupo.getId();
	} catch (Exception e) {
		throw new ConverterException("Não foi possível encontrar a categoria de código " + value + "." + e.getMessage());
	}
}
return null;

}

@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (value != null) {
System.out.println(“STRING”);
GrupoRepository repository = new GrupoRepository(getEntityManager());
GrupoUsuario grupo = repository.grupoPorID(Long.valueOf(value.toString()));
System.out.println("STRING Valor: "+Long.valueOf(value.toString()));
return grupo.getId().toString();
}
return “”;
}
[/code]

nesse caso, o que exatamente seria o grupo repository

GrupoRepository = minha classe que faz a consulta na base, dentro dele tenho esse método “grupoPorID” que faz a consulta pelo ID que estou passando …

GrupoUsuario = minha classe, é a classe do Objeto que quero exibir na tela …

ah consegui entender, deixa eu testar aqui