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

3 respostas
J

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:
<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>

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

Alguém pode me ajudar?

3 Respostas

A

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

M

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

J

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

Valeu mesmo cara. :wink:

Ahh, eu estou usando PrimeFaces 3.

Criado 13 de janeiro de 2012
Ultima resposta 13 de jan. de 2012
Respostas 3
Participantes 3