Dificuldades com combobox + banco de dados

Olá,

Preciso de ajuda em um combobox que estou implementando, porém ele não mostra o valor correto do banco de dados.

Este é o código que busca o nome dos usuarios cadastrados.

public ArrayList<novo> getlista() {

        ArrayList<novo> lista = new ArrayList<novo>();
      
        try {
            mb_conexao_mysql conexao = new mb_conexao_mysql("db_gip_"+session.getAttribute("v_uf_user"));
            Connection connection = conexao.connect();

            Statement statement1 = null;
            ResultSet rs1 = null;
            statement1 = connection.createStatement();
            
            rs1 = statement1.executeQuery ("SELECT nome FROM tab_cadastro ORDER BY nome ASC");
        
            while (rs1.next()) {
                this.Nome = rs1.getString("nome");

                novo c = new novo(Nome);
                lista.add(c);
                }
            
            rs1.close();
            connection.close();
            conexao.close();
            } catch (SQLException ex) {          
                // talvez um log aqui
                }
        
    return lista;  
    }

Ele deveria pegar o nome do usuario para mostrar no combo. Para testar se ele estava carregando os nomes eu tinha criado uma variavel temp e coloquei na sessão o resultado da query e estava certo.

So que quando implanto o projeto no combo:

<rich:comboBox id="stMod" suggestionValues="#{novo.getlista()}"  immediate="true" width="300" listWidth="300" directInputSuggestions="true" defaultLabel="Enter some value" >
</rich:comboBox>

o resultado para cada linha é mais ou menos esse:
pac_eu.novo@1a282ff
pac_eu.novo@12e96a0

A imagem abaixo fica mais claro.
http://imageshack.us/photo/my-images/833/combos.png/

Agradeço desde já a ajuda de todos.

O problema é o tipo de objeto que tu está retornando para o combobox.
Dever ser uma lista de SelectItens. Lá você pode adicionar o label e o value dele, tirando esse erro.

Faltou postar o seu Bean, já que é JSF.
E poste na área de JEE na próxima.

Abraços.

Cara me desculpe se eu escrever algumas besteira (pois não manjo nada de jee ainda, rsrs), mas usando a lógica da estrutura de classes, você mostrou estar exibindo no combo o endereço/referência da memória para cada objeto correto?

pac_eu.novo@1a282ff
pac_eu.novo@12e96a0

Pois na sua classe basta sobreescrever o método toString() e dentro dele retornar o nome do objeto em questão:

@Override
public String toString() {
     return "Nome do objeto aqui...";
}

Pelo menos assim que uso para desktop e funfa beleza.

Mais uma vez desculpas pelas besteiras escritas e espero ter ajudado.

Bom dia,

Realmente conforme nosso amigo mencionou, sobrescrever o método toString vai mudar a forma de apresentação, no entanto eu optaria em trabalhar com o SelectItem.

A sugestão é a seguinte:

na página

&lt;h:selectOneMenu id="idComponente"
		value="#{seuBean.valorSelecionado}"
		valueChangeListener="#{seuBean.valueChangeListener}"&gt;
	&lt;f:selectItem itemLabel=":: Selecione ::" itemValue="-1" /&gt;
	&lt;f:selectItems value="#{seuBean.listaSelectItem}" /&gt;
&lt;/h:selectOneMenu&gt;

No seu Bean

public void carregarValoresCombo(){
	listaSelectItem = new ArrayList&lt;SelectItem&gt;();
	for(Objeto obj : listaDeObjetos){
		SelectItem item =  new SelectItem(obj .getId(), obj .getDescricao());
		listaSelectItem.add(item);
		}
	}


public void valueChangeListener(ValueChangeEvent event){
     if (event.getNewValue().toString().equalsIgnoreCase("-1")){
	    return;
     }else{
	    valorSelecionado= event.getNewValue().toString();
     }
}

Na hora de salvar o item selecionado em seu objeto

public void gravar(){
     Objecto obj = service.findById(Long.parseLong(valorSelecionado));
     ojbPrincipal.setObj(obj );
     ...
}

Espero que ajude.

awilaz,

Mais onde eu coloco a lista vinda do banco de dados? Eu tenho que consultar la para buscar os nomes dos usuarios.

Boa tarde amigo,

neste trecho de codigo

public void carregarValoresCombo(){  
    listaSelectItem = new ArrayList&lt;SelectItem&gt;();  
    for(Objeto obj : listaDeObjetos){  
        SelectItem item =  new SelectItem(obj .getId(), obj .getDescricao());  
        listaSelectItem.add(item);  
        }  
    }  

a listaDeObjetos e a lista que vem do banco para popular o combo. Voce pode inicializa-la no construtor do bean, por exemplo, conforme abaixo?

public ReservaController(Service service){
		this.listaDeObjetos = service.findAll();
	}

Se houverem dúvidas pode falar.

Abraço