[PrimeFaces] Fechar p:dialog com IF

Bom dia ! Estamos migrando uma aplicação de RichFaces/JSF1.2 para PrimeFaces/JSF2.0, e me deparei com um problema.
Seguinte, reparem minha condição no oncomplete do dialog:

<p:dialog header="Teste" widgetVar="dialog" width="500" height="320" showEffect="fade" hideEffect="explode"> <p:commandButton value="Salvar" image="ui-icon ui-icon-disk" actionListener="#{meuController.Salvar}" update="datatable, msgValidacao" oncomplete="if (#{meuController.teste == true}) dialog.hide()" /> </p:dialog>
Antes eu fazia essa condição no oncomplete numa boa, faço a validação de alguns campos de um form no controller, e caso a variavel retorne true, eu fecho o modal, caso contrário apenas exibo os erros na tela.
Porém agora com JSF2.0/PrimeFaces não consigo implementar isso, acredito ser algo relacionado a sessão, pois o if está OK, se eu fizer fixo (“if (#{true == true}) dialog.hide()”) ele funciona numa boa.
Já coloquei várias anotações relacionadas com a sessão e não fui feliz com nenhuma delas.

Já testei também das 2 formas (Utilizava a primeira antes numa boa):

oncomplete="if (#{meuController.teste == true}) dialog.hide()" oncomplete="if (#{meuController.teste} == true) dialog.hide()"
Preciso fazer a validação no Controller, não posso usar os validators da vida do PrimeFaces/JSF.

Obrigado,

Olá amigo, conseguiu resolver o problema?? Estou tentando resolver isso e nao estou conseguindo =/

Resolvo este problema utilizando functions Javascript. Se quiser tentar, faça o seguinte:

No oncomplete do <p:commandButton> coloque o seguinte:

oncomplete="verificaSucesso();"

No topo da página coloque:

&lt;script type="text/javascript"&gt; function verificaSucesso(){ var variavel = '#{meuController.teste}'; //Aqui pega a variável do Bean if(variavel == true){ dialog.hide(); //E aqui verifica se retornou true e pode fechar } } &lt;/script&gt;

Caso a variável retorne false, o dialog permanecerá aberto e aí você indica os erros!

Mas se preferir, o if que estava tentando também funciona, da seguinte forma:

No final do método Salvar() do seu bean adicione:

RequestContext request = RequestContext.getCurrentInstance(); request.addCallBackParam("sucesso", true);

E no commandButton:

oncomplete="if(args.sucesso == true) { dialog.hide(); }"

O addCallBackParam manda uma resposta para a view tanto ao final das requisições quanto em tempo de execução

1 curtida

Obrigadaaao pela força jeanmalvessi!! :smiley:

Funcionou certinhooo!!

valeu!!
Abraçoo