5
respostas

ajuda com selectOneMenu do primefaces

Buenas pessoal, seguinte em minha aplicação na hora em que o lojista for fazer o cadastro dele no sistema, preciso exibir dois selectOneMenu, um contendo as categorias, e um segundo contendo as subcategorias relacionados aquela categoria. O que eu quero fazer, é exibir o selectOneMenu com todas as categorias para ele selecionar (isso já esta funcionando) e depois que ele escolher a categoria principal, habilitar o oneMenu com as subcategorias. Porém para popular esse outro combo, eu preciso pegar as informações do combo de categoria q ele escolheu. Como eu faço isso? como passar essa informação no momento do clique para ele chamar o método do meu bean?

5 respostas

Você pode fazer isso via ajax.

Algo parecido com isso dentro da tag do primeiro selectOneMenu. Coloque a informação como atributo no seu bean. e quando o cara selecionar através de ajax você altera o valor do atributo.

No getter que popula o outro select você pode pegar as informações de acordo com o que foi selecionado(valor do atributo do seu bean)

hunnn, boa ideia, ajax no evento change neh? faz sentido nao tinha pensado nisso kkkkk

vlw vou testar

tranquilo, depois fala o resultado aqui, e nem precisa se preocupar com o tipo do ajax o próprio jsf cuida de marcar qual é o evento, só utilizar a tag

<f:ajax..

Se tiver dúvidas em relação ao uso dela só falar também.

é errado eu chamar meu dao para listar as categorias dentro do get? Para ser especifico, o primeiro select eu listo as categorias atraves do metodo init() (POstConstruct)

posso popular meu segundo select atraves do metodo getSubcategorias?

digo, talvez venha a funcionar, é uma boa escolha?

popular no get não é uma boa solução, pois por exemplo se fosse um tabela para cada elemento da tabela seu get seria chamado e consequentemente diversas chamadas do seu dao seriam feitas.

Dai uma solução seria deixar no get, mas verificar se a lista devolvida já esta populada, algo como

public List<> getSubcategorias(){
    if(lista == null){
        lista = dao.busca();
    }
    return lista;
}

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software