Problemas em carregar selectOneMenu

iai pessual,

to começando a usar JSF agora e to com problemas para carregar um combo…vcs poderiam me ajudar?

segue meu MBean:

[code]package br.com.cienci.nfe.mbean;

import br.com.cienci.nfe.dao.DaoFactory;
import br.com.cienci.nfe.modelo.Role;
import java.util.ArrayList;
import java.util.List;
import javax.faces.model.SelectItem;

/**
*

  • @author Ciro S. Santos
    */
    public class UsuarioBean {

    private DaoFactory daoFactory;
    private List listMenuPerson = new ArrayList();

    public UsuarioBean(){
    this.daoFactory = new DaoFactory();
    }

    public List getRoles(){
    List itens = this.daoFactory.getRoleDao().listaTudo();
    for(Role r: itens){
    listMenuPerson.add(new SelectItem(String.valueOf(r.getId()), r.getDescricao()));
    }
    return listMenuPerson;
    }
    }
    [/code]

e no jsp:

<h:selectOneMenu value="" id="role_login" requiredMessage="Campo Permissão é obrigatório." required="true"> <f:selectItem itemValue="" itemLabel="-- Selecione --" /> <f:selectItems value="#{usuarioBean.roles}"/> </h:selectOneMenu> <h:message for="role_login" errorStyle="color: darkred;"/>

ai quando executo a pagina a primeira vez, ele traz os registros duplicados do banco, e toda vez q eu abro a pagina é duplicado mais uma vez, ou seja, se eu abrir 10 vezes a pagina ele carrega 10 vezes cada informação do bd…

alguem ai pode me dar uma força?
vlw

bom, fiz o seguinte:

public List<SelectItem> getRoles(){ listMenuRoles.clear(); List<Role> itens = this.daoFactory.getRoleDao().listaTudo(); for(Role r: itens){ listMenuRoles.add(new SelectItem(String.valueOf(r.getId()), r.getDescricao())); } return listMenuRoles; }

adicionei o clear()…e aparentemente funcionou…mas alguem sabe me dizer pq ele fica duplicando sempre?..e como resolver sem o clear?

outra coisa…como eu faço para pegar o id nesse combo ai e mostrar a descrição?
flw

seu codigo ta certinho…mas tova vez que carrega a pagina ele da um geRoles(); ou seja ele preenche a lista denovo e denovo e denovo, qauntas vezes for chamado o getRoles(), mas agora que vc deu o clear…ta tudo ok…outr saida seria tirar esse codigo de dentro do getRoles() e colocar em outro lugar, e deixa o getRole() somente para retorna a Lista :wink:
espero ter ajudado…

vlw a ajuda ai…

é verdade, como ele ta sendo chamado toda hora, ele ta recarregando…vlw

agora, com relação a pegar o id do q eu selecionar e mostrar a descrição no value…alguem manja como posso fazer?

<select id="idUnidade" name="produto.unMedida"> <option value="0">-- Selecione --</option> <c:forEach items="${factory.unMedidas}" var="unMedida"> <option value="${unMedida}" <c:if test="${produto.unMedida == unMedida}"> selected="true" </c:if> >${unMedida}</option> </c:forEach> </select>

ou seja, colcoar um valor no value e outro para exibir…

vlw

não entendi, achoq ue vc eja esta fazendo isso aqui:

for(Role r: itens){

listMenuRoles.add(new SelectItem(String.valueOf(r.getId()), r.getDescricao()));

}

mostra a descricao, mas seleciona o ID…

ou eu entendi errado?

aaaaaaaaaaah ta…isso msm, entendi…

era isso msm, problema resolvido com combo…

vlw cara…

aproveitando o tópico…estou com uma outra duvida…creio q seja uma pergunta boba…mas ai vai…

como faço para pegar o valor de um <h:inputHidden> em uma função javascript e mostrar em um alert…não consegui fazer isso…tentei fazer o seguinte:

  <h:inputHidden id="idResultado" value="#{usuarioBean.resultado}"/>   

<script language="javascript"> function showRes(){ alert(document.getElementsByName("idResultado").value); } </script>

<a4j:commandButton action="#{usuarioBean.adicionarUsuario}" onclick="showRes();" value="Cadastrar" />  

mas isso ai num resolveu…alguem ai podia me dar uma força?
vlw