Atualizar SelectOneMenu no <p:dialog>

14 respostas
B

EAE GALERA, ESTOU COM UM PROBLEMA NO SELECTONEMENU DO FACES 2, TENHO UM METODO QUE AO CLICAR EM UM BOTAO ESTE METODO CARREGA UMA LISTA QUE ESTA VINCULADA AO SELECTONEMENU, POREM ESTE NÃO ATUALIZA FICANDO POSICIONADO NO ULTIMO REGISTRO QUE FOI SELECIONADO.

<h:selectOneMenu id="somnGrupo" value="#{mbUsuario.usuario.grupo.id}"> <f:selectItems value="#{mbUsuario.grupos}" var="grupo" itemLabel="#{grupo.descricao}" itemValue="#{grupo.id}" /> </h:selectOneMenu>

mbUsuario.grupos = é uma lista de grupos.

POR FAVOR ME DEEM UM SOCORRO…

14 Respostas

C

Já tentou isso:

<p:commandButton value="Carregar" actionListener="#{actionBean.action}" update="somnGrupo" />
B

<p:commandLink id="lnkGravar" value="Gravar" ajax="true" actionListener="#{mbUsuario.gravar}" style="margin-right: 10px" update="frmCadastroUsuario frmGridUsuario" rendered="#{empty mbUsuario.usuario.id}"/>

O mbUsuario.gravar CHAMA UM METODO GRAVAR QUE POR SUA VEZ CHAMA O METODO carregarGrupos QUE CARREGA A LISTA DOS GRUPOS E ESTA VINCULADO COM O SELECTONEMENU.
É FEITA A ATUALIZAÇÃO DE TODOS COMPONENTES DO FORM MAS O PROBLEMA É QUE NÃO ATUALIZA OS DADOS DO COMPONENTE SELECT, E TRAZ O COMO PADRAO O ULTIMO ITEM SELECIONADO.

private void carregarGrupos() { Query query = em.createNamedQuery("Grupo.findAll"); this.setGrupos((List<Grupo>) query.getResultList()); this.getGrupos().add(0, new Grupo(0, "&lt;Nenhum&gt;")); }

C

Adicione o atributo process no commandLink.

<p:commandLink id="lnkGravar"  
                                           value="Gravar"  
                                            ajax="true"  
                                           actionListener="#{mbUsuario.gravar}"  
                                            style="margin-right: 10px"  
                                           update="frmCadastroUsuario frmGridUsuario"  
                                           process="somnGrupo"
                                          rendered="#{empty mbUsuario.usuario.id}"/>
B

EAE SEU cristiano.andrade…RSRSR
CARA AINDA NÃO ATUALIZOU O SELECT QUANDO EU MANDO GRAVAR…OQUE SERÁ HEIN ??
MAIS VALEW PELA DICA…

B

Pessoal estou precisando, com uma certa urgencia, alguem mais poderia me ajudar?

Obrigado

M

Estou com o mesmo problema.

B

Explique melhor seu problema talvez eu possa ajudar !!!

M

Então cara,

Acontece o seguinte:

  • Tenho 3 “selectOnMenu” aninhados - Turma / Disciplina / Conteúdo Programático;
  • No [selectItem] do Conteúdo programático recebo uma lista de itens com o status, mais ou menos assim [Conteúdo Programático - [data] - Pendente].
  • Após a seleção desses “SelectOnMenu” é renderizado um painel onde trabalho com as informações do conteúdo programático selecionado,
  • no Painel clico num “check” de [Conteúdo Concluído] e no botão [inserir] e o objeto é alterado no banco perfeitamente;

O problema é, após setar como concluído, preciso recarregar somente o selectOnMenu para atualizar o status do conteúdo [Concluído],
para que seja executado o select novamente.

Essa é minha primeira tarefa com JSF, já quebrei uns três dias de trabalho com isso e nada (já tentei usar reRender no button e com ajax).

Teoricamente, é só fazer o meu SelectOnMenu do Conteúdo carregar novamente, pois ele já executa um novo select.

Alguma sujestão?

Obrigado

B

Se possível poste o código da tela…

A

aproveite que vocês estão utilizando primefaces e utilizem o p:aja event="". Ao executar uma função, ele irá escutar algo antes, assim você pode direcionar a página de vocês.

M

Bruno…

Consegui resolver o problema cara, na verdade precisei limpar e popular novamente a lista carregada pelo SelectOnMenu e renderiza-lo para
que o Objeto fosse atualizado na tela, porém acabei entrando em um outro problema:

  • No momento que seto meu Conteúdo Programático como concluído e minha lista é atualizada e recarregada, meu “selectItens” perde a referência
    trazendo sempre o primeiro registro da lista.

Existe uma forma de controlar (setar) para que, mesmo a lista de objetos sendo recarregada eu não perca o objeto de referência?

valeu!!!

B

No momento que você carregar a sua lista para o seu “selecItens” e renderizar a tela, o seu “selectOneMenu” deve estar com o “value” apontando para um atributo de um objeto, então você deve também nesse mesmo momento popular esse objeto com o registro corrente.

TELA
                    <h:selectOneMenu value="#{bean.objeto.atributo}">
                        <f:selectItems value="#{bean.lista}"
                                       var="#{item}"
                                       itemLabel="#{item.descricao}"
                                       itemValue="#{item}"/>
                    </h:selectOneMenu>


CLASSE

    bean.setObjeto(ObjetoCorrente);
  • ou - como no exemplo, lembrando que não sou bom pra exemplo…
    Qualquer coisa manda ai.
M

Fala Bruno!

Continuo com o mesmo problema, mesmo atualizando o “Value” do “SelectOneMenu”.

Percebi o seguinte comportamento --> Quando seto minha Lista como null para que seja recarregada, após a ação do botão a lista é atualizada, pois no “get” se a lista estiver vazia os dados são extraídos do banco novamente, é nesse momento que perco a referência do Combo.

Pensando dessa forma pensei em atualizar apenas o item referente, então fiz o seguinte:

  • Deixei de setar null na minha lista (para que não seja recarregado tudo novamente);
  • Criei um novo Objeto (já com a descrição atualizada);
  • Inseri esse objeto na posição do ArrayList referente ao item que eu queria substituir, exemplo:
    posição 0 - item 1;
    posição 1 - item 2 (Item à substituir no Combo);
Minha Lista ficou assim:

posição 0 - item 1;

posição 1 - item 2 (Novo Objeto, atualizado);

posição 2 - item 3 (Item antigo);

Não adiantou muito, pois dessa forma meu Combo continua fazendo referência ao item antigo, só que se deleto a posição 2 (item antigo), meu selectOneMenu é rerenderizado na primeira posição.
Conclusão --> Toda vez que mexo na minha lista, meu selectOneMenu é prejudicado, mesmo que o “value” do “SelectOneMenu” seja atualizado.

Essa situação já está me irritando. Algo que parece (e deveria ser) tão simples está me levando dias de analise e tentativas sem sucesso.

Se tiver alguma idéia que possa acrescentar agradeço…

vlw!!!

B

Cara, esse modo que você esta fazendo sem ser folgado, é o tipo “gambiarra”.

Tipo quando você salva esse objeto, antes de tudo você pode inserir essa objeto na lista. e depois atualizar na tela.
Acredito que seu problema não seja grave é algo simples que está passando despercebido.

Cole as partes do código de tela e classe que você usa nesse caso pra gente ver.

Criado 28 de abril de 2010
Ultima resposta 12 de ago. de 2011
Respostas 14
Participantes 4