JSF2/Primefaces - Dialog/Identificar mensagem SEVERITY_ERROR

Pessoal, desenvolvi um cadastro utilizando p:dialog e utilizei uma função javascript(do exemplo do login) para que ele feche apenas quando não falhar nenhuma verificação de campo obrigatório. Até ai, tudo funciona corretamente. O problema é que faço uma validação no servidor também, então gostaria de saber se chegou alguma mensagem do tipo SEVERITY_ERROR para que o dialog não feche. Alguém sabe como?

Um componente é um elemento incapaz de reconhecer qualquer coisa, em suma, ele é um amontoado de HTML que é gerado em uma das fases do ciclo de vida do JSF.
Assim sendo, você jamais vai conseguir fazer com que um componente entenda um retorno síncrono ou assíncrono, diferente dos que ele está programado a fazer.
No entanto, você pode trabalhar com javascript e utilizar ajax.

Quando trabalhamos com JSF, temos alguns objetos EL implícitos, e nesse caso um deles pode ser útil pra você.

Se você quer saber qual foi a mensagem de maior severidade na fila de mensagens do seu contexto, você pode verificar isso através do FacesContext, assim:FacesContext ctx = FacesContext.getCurrentInstance(); Severity maximumSeverity = ctx.getMaximumSeverity();E pronto, você tem a maior severidade possível. Caso não exista nenhuma mensagem, é retornado null.

Isso seria do “lado Java” da sua aplicação. Caso queira obter essa informação na view também é possível. Você tem acesso ao FacesContext através do tal objeto implícito, que no caso é o #{facesContext}. Portanto se quiser colocar em um input, basta fazer assim:<h:inputText value="#{facesContext.maximumSeverity}" />A partir daí você usa sua criatividade, pois a informação que você precisa você consegue pegar dessa maneira :slight_smile:

Obrigado pela ajuda pessoal, utilizei essa estratégia do objeto facesContext através de EL e criei um método javascript que consegue identificar se chegou mensagem de erro. Agora da pra fazer um cadastro completo utilizando o dialog.