Combo JSF a partir do BD

Pessoal, estou começando no java e estou com um problema. Eu estou puxando de outra tabela os dados para um combobox, até ai tudo bem, só que eu não estou conseguindo converter o objeto do combo para uma string ou integer, que será como eu vou gravar no banco…
Se alguém puder me ajudar ai…

Esse é meu combo:

         <h:selectOneMenu value="#{pessoaMB.selecionado}">    
              <f:selectItems value="#{pessoaMB.listaCombo}" var="pessoa" />    
         </h:selectOneMenu><br/>  

Essa é a classe Bean :

     public List<SelectItem> getListaCombo() throws ClassNotFoundException, SQLException {  
        if (listaCombo.isEmpty()) {  
            for (Pessoa retorno : dao.Listar()) {  
                listaCombo.add(new SelectItem(retorno.getIdpessoa(), retorno.getLogin()));  
            }  
        }  
        return listaCombo;  
    }  
  
    public void setListaCombo(List<SelectItem> listaCombo) {  
        this.listaCombo = listaCombo;  
    }  
  
    public int getSelecionado() {  
        return selecionado;  
    }  
  
    public void setSelecionado(int selecionado) {  
        this.selecionado = selecionado;  
    }  

E a classe DAO onde eu listo as pessoas:

    public List<Pessoa> Listar() throws ClassNotFoundException, SQLException{  
        Class.forName("org.apache.derby.jdbc.ClientDriver");  
        Connection cx = DriverManager.getConnection("jdbc:derby://localhost:1527/jsfexample","jsf","jsf");  
          
        String sql = "select idpessoa, email, login, senha, observacao from app.pessoa";  
        PreparedStatement ps = cx.prepareStatement(sql);  
          
        ResultSet rs = ps.executeQuery();  
          
        List<Pessoa> pessoas = new ArrayList<Pessoa>();  
        while(rs.next()){  
            Pessoa p = new Pessoa();  
            p.setIdpessoa(rs.getInt("idpessoa"));  
            p.setEmail(rs.getString("email"));  
            p.setLogin(rs.getString("login"));  
            p.setSenha(rs.getString("senha"));  
            p.setObservacao(rs.getString("observacao"));  
 
              
             
            pessoas.add(p);  
        }  
          
        return pessoas;  
    }  

Eu precisava atribuir o ID da pessoa para fazer a inserção dessa nova tabela
Se alguém puder ajudar ai eu agradeço!
Valeu!!

Usa um converter genérico,assim vc pode trabalhar diretamente com os objetos em vez de ficar buscando pelo id.
http://www.rponte.com.br/2008/07/26/entity-converters-pra-da-e-vender/

Então teu código ficaria assim:
pagina:

&lt;h:selectOneMenu value="#{pessoaMB.selecionado}" converter="entityConverter"&gt;      
     &lt;f:selectItems value="#{pessoaMB.listaCombo}"  /&gt;      
&lt;/h:selectOneMenu&gt;<br/>    

MB:


Pessoa selecionado;

public List&lt;SelectItem&gt; getListaCombo() throws ClassNotFoundException, SQLException {    
    if (listaCombo.isEmpty()) {    
        for (Pessoa retorno : dao.Listar()) {    
            listaCombo.add(new SelectItem(retorno, retorno.getLogin()));    
        }    
    }    
    return listaCombo;    
}    

Rafael, continua dando erro na conversão cara…
eu havia tentado antes um converter tbm, só que não um genérico como o seu
eu to usando o SimpleEntityConverter.

O que será hein?! :S

na hora de inserir dá java.lang.NullPointerException

Qual o motivo de você adicionar o Login e o Id pessoa na listaCombo?

listaCombo.add(new SelectItem(retorno.getIdpessoa(), retorno.getLogin()));

Também estava com muita dificuldade neste item, porém consegui resolver meu problema, estou utilizando hibernate, mas neste caso a lógica é a mesma.

Na verdade estou fazendo um teste para outras tabelas que vou usar deste tipo de relacionamento.
Por exemplo, neste caso é a tabela telefone que recebe uma pessoa. Eu quero visualmente mostrar o nome da pessoa(login), mas na hora de inserir no BD tenho que associar o telefone a um ID entendeu?

Entendi sim!
Se não se importar posso te passar meu código hoje a tarde?
Meu pc que estão meus códigos não estão aqui.
Creio se você tiver hoje a tarde conseguiremos resolver seu problema!

Opa tranquilo cara, já to quebrando a cabeça com isso aqui a alguns dias, dá pra espera sim kkk

Desde já obrigado! :smiley:

Vai meu código que deu certo aqui.

na página xhtml ficou desta maneira

<h:selectOneMenu id="operacaoUsuario" value="#{usuarioBean.usuario.operacao}" >
	    		<f:selectItem id="op" itemLabel="Selecione" />
	    		<f:selectItems id="op2" value="#{usuarioBean.operacoes}" />
	    		<h:message for="operacaoUsuario" />
</h:selectOneMenu>

No meu managed bean

private List<SelectItem> operacoes;

public UsuarioBean(){
	
		//Método construtor é necessário
		//A variável chama o método para obter todos as "Operações" cadastradas
		//Para depois serem listadas em um "selectOneMenu" para o Usuario.
		operacoes = getListarOperacao();
		
	}


public List<SelectItem> getListarOperacao(){
		ArrayList<SelectItem> lista = new ArrayList<SelectItem>();
		OperacaoDao dao = new OperacaoDaoImpl();
		List<Operacao> resultado = (List<Operacao>) dao.listarOperacao();
		
		for (Operacao operacao : resultado)
		{
			SelectItem item =  new SelectItem(operacao.getNome(), operacao.getNome());
			lista.add(item);
		}

		return lista;
	}

Como te falei, uso hibernate, mas a lógica é a mesma!

Qualquer dúvida só postar ai.

Ainda não to conseguindo cara, sempre da erro na hora de converter =/

o que é esse método OperacaoDaoImpl(); no seu código jonatex?

Esse método é para eu acessar a classe de persistência: salvar, apagar, buscar, etc.

Através da declaração do objeto, posso acessar os métodos dele.

A questão é porque voce precisa converter, observe que no meu código não há nenhum tipo de conversão.