[JSF] Como fazer pra dialog modal só fechar quando não existir mensagens pra exibir?

Bom dia, pessoal… Esse é o meu código:

<p:dialog   widgetVar="editionDialog" header="Editar Pais" id="editionDialog"
            minWidth="730" minHeight="400"  
            modal="true" 
            showEffect="explode" hideEffect="explode" 
            styleClass="editionDialog">
            
    <h:form  id="editionForm" >
        <p:messages globalOnly="true" id="messages"  />
    
        <h:panelGrid id="editionDisplay" columns="2" >
            <h:outputLabel value="Nome" styleClass="top" />
            <h:inputText    value="#{paisMB.selectedEntity.nome}" id="nome" styleClass="field text" maxlength="50"  
                            required="true" />
                            
            <h:outputLabel value="Sigla" styleClass="top" />
            <h:inputText    value="#{paisMB.selectedEntity.sigla}" id="sigla" styleClass="field text" maxlength="3"  
                            required="true" />
            
        </h:panelGrid>
        <h:panelGroup>
            <p:commandButton    value="Gravar" actionListener="#{paisMB.executeUpdate}"                                              
                                update="editionForm,gridForm:datatableListing"
                                oncomplete="if (#{facesContext.maximumSeverity == null}) #{p:widgetVar('editionDialog')}.hide();" 
                                />
        </h:panelGroup>
    </h:form>
</p:dialog>

Alguém podia me ajudar com isso?

vc vai ter que criar um java Script manterDialog…

procura no google manterDialog

Acho que isso não ajuda muito…

Pq eu teria que criar uma função javascript? De que forma ela deveria ser criada?

olha, tem um esquema em javaScript que vc pega a variavel la do bean (“tipow uma variavel booleana, se tiver true e que exibi mensagem , se tiver false não exibe mensagem”), ai de acordo com status dela vc coloca show ou hide no dialog…

Uma maneira mais elegante e simple é vc coloca um p:group fora do dialog , e manda a mensagem pra ele,

Consegui fazer o que eu queria, mas a solução ficou dependente de implementação do JSF…
Usei o primefaces, então ficou assim:

javascript:

function handleCloseEditionDialog(xhr, status, args) {
	if (! args.validationFailed && ! args.exceptionThrown ) {
		editionDialog.hide();
	}
}

importando no template:

<h:outputScript library="js" name="crud.js" />

No manipulador de exceções:

RequestContext.getCurrentInstance().addCallbackParam("exceptionThrown", true);	

utilizando no dialog:

<p:dialog   widgetVar="editionDialog" header="Editar Pais" id="editionDialog"
            minWidth="730" minHeight="400"  
            modal="true" 
            showEffect="explode" hideEffect="explode" 
            styleClass="editionDialog">
            
            
    <h:form  id="editionForm" >
        <p:messages globalOnly="true" id="messages"  />
    
        <h:panelGrid id="editionDisplay" columns="2" >
            <h:outputLabel value="Nome" styleClass="top" />
            <h:inputText    value="#{paisMB.selectedEntity.nome}" id="nome" styleClass="field text" maxlength="50"  
                            required="true" />
                            
            <h:outputLabel value="Sigla" styleClass="top" />
            <h:inputText    value="#{paisMB.selectedEntity.sigla}" id="sigla" styleClass="field text" maxlength="3"  
                            required="true" />
            
        </h:panelGrid>
        <h:panelGroup>
            
                <p:commandButton    value="Gravar" actionListener="#{paisMB.executeUpdate}"                                              
                                    update="editionForm,gridForm:datatableListing"
                                    oncomplete="handleCloseEditionDialog(xhr, status, args)" 
                                    />
        </h:panelGroup>
    </h:form>
</p:dialog>

Eu queria saber se há algum modo de pegar esse mesmo RequestContext, não dependente de implementação JSF, mas diretamente da api… Alguém sabe se tem como? Tentei com Flash Scope mas não rolou…

O MyFaces também tem objeto parecido, mas não há nenhum gancho para a JSF API, esses RequestContext herdam diretamente de Object… :frowning:

É isso aii,Valeww

A idéia que eu tinha era fazer isso de um modo que eu não sofresse, caso desejasse trocar de lib (de primefaces pra icefaces ou richfaces, por exemplo), ou ainda misturar duas libs…
Como eu ficaria? se eu usasse o commandButton do primefaces, seria o RequestContext do primefaces, se usasse o commandButton do icefaces, seria um RequestContext análogo no icefaces…

Isso me parece meio tosco… Não tem interface não?

pega por Servlet não funciona?