Utilizando h:selectOneMenu

Como faço pra preencher um h:selectOneMenu a partir de itens recuperados do BD utilizando um bean?

Creio que isso ajuda:

<f:selectItems value="#{teuBean.recupera}"/>

Valew!

Olá, pessoal !

Aproveitando a duvida do colega, gostaria de ver se alguém pode me ajudar…no seguinte…já estou com o selectItems pegando os valores do banco porém ao mostrar no menu os valores estão vindo duplicados. No banco tenho um total de 3 registros, e quando mando executar aparece no menu 6 registros.

Alguém saberia me dizer o que pode ser ? Já executei o código, no console e a lista de SelectItem, está sendo preenchida com somente 3 itens mesmo.

Agradeço a ajuda de todos…!

<rich:panel>
                <a4j:form ajaxSubmit="true" reRender="form_simples">
                    <h:selectOneMenu value="#{categoria.objCategoria}">
                        <f:selectItems value="#{categoria.listaCategoria}"/>
                    </h:selectOneMenu>
                </a4j:form>
            </rich:panel>
public class CategoriaBean {
    
    private CtrlCategoria ctrlCategoria;
    private String nome;
    private Categoria objCategoria;
    private List<SelectItem> listaCategoria;
    
    /** Cria uma nova instancia de CategoriaBean */
    public CategoriaBean() {
        this.setCtrlCategoria(new CtrlCategoria());
        this.listaCategoria = new ArrayList<SelectItem>();
    }
    
    public CtrlCategoria getCtrlCategoria() {
        return ctrlCategoria;
    }
    
    public void setCtrlCategoria(CtrlCategoria ctrlCategoria) {
        this.ctrlCategoria = ctrlCategoria;
    }
    
    public String getNome() {
        return nome;
    }
    
    public void setNome(String nome) {
        this.nome = nome;
    }
    
    public String add(){
        
        String objString = null;
        
        try {
            if(this.ctrlCategoria.insere(this.getNome())){
                objString = new String("ok");
            } else {
                objString = new String("erro");
            }
        } catch (Exception e) {
            objString = new String("erro");
            StatusBean.setStatus(e.getMessage());
        }
        
        return objString;
    }
    
    public List<SelectItem> getListaCategoria(){
        List<Categoria> lista = null;
        try {
            lista = this.ctrlCategoria.listar();
            for(Categoria c: lista){
                this.listaCategoria.add(new SelectItem(c, c.getNome()));
            }
        } catch (Exception ex) {
            StatusBean.setStatus(ex.getMessage());
        }
        
        return this.listaCategoria;
    }
    
    public Categoria getObjCategoria() {
        return objCategoria;
    }
    
    public void setObjCategoria(Categoria objCategoria) {
        this.objCategoria = objCategoria;
    }
    
    public void setListaCategoria(List<SelectItem> listaCategoria) {
        this.listaCategoria = listaCategoria;
    }
}

Também estou com o problema dos dados serem exibidos duplicados no selectOneMenu.

Fiz um teste, colocando um data table na página e o resultado exibido é mais estranho ainda, onde 3 vezes cada registro do meu BD é exibido.

Acho que pode ser algum problema com o hibernate, na hora de retornar…

alguma sugestão?