Autoalimentar um h:selectOneMenu!

2 respostas
mfbottoni

Boa tarde!

Escrevi o seguinte código para preencher as opções de um selectOneMenu quando uma opção de outro selectOneMenu for escolhida.
Mas não está funcionando, quando seleciono uma opção no primeiro selectOneMenu a página é recarregada e o outro menu continua vazio.

Alguém sabe me dizer o que está errado?

<h:selectOneMenu id="categoriaPai" value="#{NovoNegocioBean.categoriaPai}" onchange="this.form.submit();" valueChangeListener="#{NovoNegocioBean.AlteraCategorias}">
          <f:selectItems value="#{NovoNegocioBean.categoriasPai}"/>
</h:selectOneMenu><br/>

<h:selectOneMenu id="categoria" value="#{NovoNegocioBean.categoria}">
         <f:selectItems value="#{NovoNegocioBean.categorias}"/>
</h:selectOneMenu> *
public void AlteraCategorias () {
        TipoDAO td = new TipoDAO ();
        List<Tipo> Tipos = null;

        if (CategoriaPai.equals(" "))
        {
            Categorias = new ArrayList();
            Categoria = " ";
        }
        else
        {
            Tipos = td.getTiposPorPai(CategoriaPai);
            Categorias = new ArrayList();
            for (int i = 0; i < Tipos.size(); i++)
                Categorias.add(new SelectItem(new String (Tipos.get(i).getTipo())));
        }
    }

Obrigado!
Abraço, Bottoni

2 Respostas

thiagocg

Olá mfbottoni, o ideal seria o proprio componente ser responsável por renderizar seus dados.
Eu indicaria vc utilizar alguma biblioteca ajax, como o a4j, com ele vc poderia fazer um rerender apenas no componente desejado e neste metodo de carga ele pegaria a informação que precisa do outro combo e então executaria sua lógica para se "autoalimentar".

Ex.
<h:selectOneMenu id="categoriaPai" value="#{NovoNegocioBean.categoriaPai}">  
    <f:selectItems value="#{NovoNegocioBean.categoriasPai}"/>  
    <a4j:support event="onchange" reRender="categoria" />
</h:selectOneMenu><br/>  
   
<h:selectOneMenu id="categoria" value="#{NovoNegocioBean.categoria}">  
    <f:selectItems value="#{NovoNegocioBean.categorias}"/>  
</h:selectOneMenu>

Desta forma vc estaria abandonando o submit do formulario o que ja seria um ganho, alem de deixar seu código mais simples de manter.

Espero ter ajudado!

[]'s

mfbottoni

Ow, gostei da ideia!
Vou fazer assim que chegar em casa. :slight_smile:

Vlw Thiago!
Abraço, Bottoni

Criado 22 de abril de 2010
Ultima resposta 22 de abr. de 2010
Respostas 2
Participantes 2