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. 
Ahh, eu estou usando PrimeFaces 3.