Combo JSF a partir do BD

9 respostas
V

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!!

9 Respostas

R

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;    
}
V

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

J

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.

V

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?

J

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!

V

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

Desde já obrigado! :smiley:

J

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.

V

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

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

J

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.

Criado 11 de setembro de 2011
Ultima resposta 12 de set. de 2011
Respostas 9
Participantes 3