Richfaces: como fechar modal panel apos tratar request!

Caras, tenho que exibir um modal panel para inserir um cnpj e nome fantasia de empresas, porem, caso o cnpj já exista em uma lista, devo emitir uma mensagem do tipo “cnpj existente” para o usuario e manter o modal. Ate aqui tudo bem! Porem, quando insiro um cnpj que NAO existe o modal permanece aberto, o que nao deveria ocorrer. Meu codigo eh o seguinte:

<rich:modalPanel id="pnlEmpresaAut" height="150" width="460">
                        <f:facet name="header">
                            <h:outputText value="Empresa Autorizada x Usuário" />
                        </f:facet>
                        <f:facet name="controls">
                            <h:graphicImage value="/img/close.png" style="cursor:pointer" onclick="Richfaces.hideModalPanel('pnlEmpresaAut')" />
                        </f:facet>
                        <h:form>
                            <h:panelGrid columns="3">
                                <h:outputText value="CNPJ"/>
                                <h:inputText id="nrCnpjAut" label="CNPJ" value="#{MBUsuario.empAut.id.nrCnpj}" size="18" maxlength="14" required="true" styleClass="edit2">
                                     <f:validator validatorId="checkCNPJEmpAutExistente" />
                                </h:inputText>
                                <h:message for="nrCnpjAut" styleClass="mensagemErro" />

                                <h:outputText value="Razão Social"/>
                                <h:inputText id="nmRazaoSocialAut" label="Razão Social" value="#{MBUsuario.empAut.nmRazaoSocial}" size="60" maxlength="60" required="true" styleClass="edit2"/>

                                <h:panelGroup>

//o problema esta no atributo oncmplete do <a4j:commandButton>. Gostaria de incluir uma condicao aqui, mas nao esta dando certo
                                    <a4j:commandButton action="#{MBUsuario.adicionarEmpresaAutorizada}" value="Adicionar" styleClass="botoes" oncomplete="Richfaces.hideModalPanel('pnlEmpresaAut')" reRender="dataEmpAut, scEmpAut"/>
                                    <h:commandButton value="Cancelar" onclick="javascript:Richfaces.hideModalPanel('pnlEmpresaAut')" styleClass="botoes"/>
                                </h:panelGroup>
                            </h:panelGrid>
                            <a4j:outputPanel ajaxRendered="true">
                                <h:messages styleClass="mensagemErro" layout="table"/>
                            </a4j:outputPanel>
                        </h:form>
                    </rich:modalPanel>

Valeuuu

Galera, pensei em fazer algo assim:

<a4j:commandButton action="#{MBUsuario.adicionarEmpresaAutorizada}" value="Adicionar" styleClass="botoes" oncomplete="if (!ajaxRequestContainsErrors()) Richfaces.hideModalPanel('pnlEmpresaAut');" reRender="dataEmpAut, scEmpAut"/>

Mas agora o modal eh fechado em qualquer circunstancia! Ferrou!..rsrs

Crie um id para seu commandLink e tenta o seguinte:

<rich:componentControl for="pnlEmpresaAut" attachTo="idDoSeuCommandLink" operation="hide" event="oncomplete" />

Cara, o que acho que tentar algo assim:

 <rich:modalPanel id="pnlEmpresaAut" height="150" width="460" rendered="#{meuManagedBean.openModalPanel}">

valeu

Tente assim “#{rich:component(‘modalValores’)}.hide();”

Segue a solucao:

<a4j:commandButton action="#{MBUsuario.adicionarEmpresaAutorizada}" value="Adicionar" styleClass="botoes"  oncomplete="javascript:Richfaces.hideModalPanel('pnlEmpresaAut');" reRender="dataEmpAut, scEmpAut"/>

Tenho utilizado a seguinte solução:

					<a4j:commandLink styleClass="botaoAtivado" id="btAddOcorrencia"
						reRender="formListOcorrencias"
						status="commonstatus" action="#{contratadoBean.addOcorrencia}"
						value="Adicionar" type="ajax">
						<a4j:support event="oncomplete"
							oncomplete="if (${!contratadoBean.exibeModalEditar}) Richfaces.hideModalPanel('mpEditarOcorrencias')" />
					</a4j:commandLink>

O método addOcorrencia seta false em ${!contratadoBean.exibeModalEditar} caso não haja erro (esse booleano funciona como uma flag. Estou trabalhando em escopo de sessão ou a4j:keepAlive). Se houve erro, seta true e executa um addMessage.

Porém não consegui resolver um problema: Ao utilizar essa solução, a mensagem é exibida e instantaneamente desaparece. Alguém sabe o motivo disso?

Grato!

Resolvi o problema desta forma, usando a condição fecharTelaJustificativa, um boolean criado no controlador…

<a4j:commandButton id=“cmdConfirmar” value=“Confirmar” styleClass=“botao”
action="#{bean.confirmar}"
reRender=“panelManterSeries”
disabled=“false”
oncomplete=“if (#{bean.fecharTelaJustificativa}) Richfaces.hideModalPanel(‘modalPanelJustificativas’)”/>

Caso fecharTelaJustificativa seja setado como sim dentro do método confirmar, o modal é fechado. Caso contrário continua aberto…

Apenas corrigindo o que escrevi … Caso seja setado como true e não como sim… :slight_smile: