[RESOLVIDO] Ajuda com: Mensagem e diálogo (JSF, PrimeFaces)

Olá galera,

É o seguinte:

Eu tenho uma tela de cadastro onde ao clicar em salvar é exibido um diálogo.
Porém as vezes o usuário clica em salvar e tem algum erro na tela (que é exibido no p:messages). A mensagem de erro é exibida e junto com ela o diálogo também.

Aqui está o que eu uso para exibir as mensagens:

<p:messages showDetail="true" autoUpdate="true" showSummary="false" />

Aqui está o botão que salva e chama o diálogo:

<p:commandButton action="#{bean.salvar}" oncomplete="confirmation.show()" value="Finalizar" />

Aqui está o diálogo:

[code]<p:dialog header=“Escolha uma opção” modal=“true” closable=“true”
widgetVar=“confirmation” width=“170”>
<h:commandLink onclick="" title=“Agendar consulta”>
<h:graphicImage style=“border:0;”
value="/recursos/imagens/agend.png" height=“32” width=“32” />
</h:commandLink>

<h:commandLink onclick="" title=“Gerenciar consulta”>
<h:graphicImage style=“border:0;”
value="/recursos/imagens/gerenciar.png" height=“32” width=“32” />
</h:commandLink>
<p:commandButton value=“Encerrar” action="#{bean.voltar}"
ajax=“false” />

		</p:dialog>[/code]

Gostaria que o diálogo só aparecesse se REALMENTE não tiver nenhum erro na tela.

Alguém pode me ajudar?

Utilize a classe RequestContext (org.primefaces.context.RequestContext) do primefaces

Caso esteja utilizando o primefaces 2.x

//seu método de salvar
 public void salvar() {  

        //faça aqui as validações

        //caso tenha dado tudo certo
        RequestContext context = RequestContext.getCurrentInstance();  
        //isso inclui na resposta o parametro sucesso
        context.addCallbackParam("sucesso", true); 
      
 }

Ná página coloque o seguinte script:

<script type="text/javascript">  
function complete(xhr, status, args) {  
    if(args.sucesso) {  
        confirmation.show();
    } 
}  
</script>  

No commandButton altere para:

<p:commandButton action="#{bean.salvar}"  
                    oncomplete="complete(xhr, status, args)" value="Finalizar" /> 

Para o Primefaces 3 (maneira mais fácil):

Você pode controlar isso na própria classe java:

//seu método de salvar
 public void salvar() {  

        //faça aqui as validações

        //caso tenha dado tudo certo
        RequestContext context = RequestContext.getCurrentInstance();  
        //execute javascript
        context.execute("confirmation.show();");  
      
 }

Remova o oncomplete do commandButton:

<p:commandButton action="#{bean.salvar}" value="Finalizar" /> 

Mais detalhes sobre essa classe: http://www.primefaces.org/showcase/ui/requestContext.jsf

Qual o erro que aparece… outra coisa, como esta o seu MB?

Obrigada ayslanms, implementei o que você passou e funcionou certinho.

Valeu mesmo cara. :wink:

Ahh, eu estou usando PrimeFaces 3.