[RESOLVIDO] JSF - fechar rich:modalPanel usando h:commandButton

Tenho um formulário para geração de relatórios.

Como foi necessário usar métodos que forçavam o browser a fazer o download dos mesmos, eu só pude usar o h:commandButton (nâo funciona com a4j:commandButton).
Eu queria que ao clicar no botão de gerar relatório aparecesse um modalPanel de “carregando”. Eu consigo chamar o mesmo, mas não consigo fecha-lo após a geração do relatorio (caixa de download do browser).

Alguém pode me ajudar?

Meu código:

parte do xhtml de geração de relatorios…

<a4j:region id="regionGerarRelatorio" renderRegionOnly="false">
											
	<h:commandButton id="btGerarRelatorio" value="Gerar Relatório"
		action="#{academicoAction.geraRelatorio}"
		style="width: 150px;"
		reRenderAfterComplete="formRelatorios"
		onclick="Richfaces.showModalPanel('painelCarregando')">
									
	        <f:setPropertyActionListener value="#{org.jboss.seam.document.documentStore.newId()}" 
		target="#{academicoAction.docId}"/>
									
       </h:commandButton>			
										
</a4j:region>

<h:panelGroup>
	<rich:modalPanel id="painelCarregando" autosized="true"
		ajaxRendered="true" width="200">
		<f:facet name="controls">
			<h:panelGroup>
				<h:graphicImage value="#{recursos.IMAGEM_FECHAR}"
					id="fecharformRemoverItem" styleClass="hidelink" />
				<rich:componentControl for="painelCarregando"
					attachTo="fecharformRemoverItem" operation="hide"
					event="onclick" />
			</h:panelGroup>
		</f:facet>			
	        <center>
	            <h:graphicImage value="#{recursos.IMAGEM_CARREGANDO}" />
	            <rich:spacer width="15" />
	            <h:outputText value="Gerando Relatório..."/>
	        </center>
    </rich:modalPanel> 
</h:panelGroup>
oncomplete="Richfaces.hideModalPanel('painelCarregando')"

valeu pela resposta,

eu já havia tentado com o “oncomplete” mas nao funcionou

a tag h:commandButton nao possui oncomplete

mais ideias?

Cara é o seguinte, isso é simples, é so vc colocar no oncomplete a funcao para fechar o modal. Exemplo:

 <a4j:region id="regionGerarRelatorio" renderRegionOnly="false">  
                                               
     <h:commandButton id="btGerarRelatorio" value="Gerar Relatório"  
         action="#{academicoAction.geraRelatorio}"  
         style="width: 150px;"  
         reRenderAfterComplete="formRelatorios"  
         onclick="Richfaces.showModalPanel('painelCarregando')"
         oncomplete="javascript:Richfaces.hideModalPanel('painelCarregando')" >   
                                       
             <f:setPropertyActionListener value="#{org.jboss.seam.document.documentStore.newId()}"   
         target="#{academicoAction.docId}"/>  
                                       
        </h:commandButton>           
                                           
</a4j:region> 

Mas é o seguinte, para este tipo de funcionalidade onde é preciso informar o carregamento de algum evento ajax, não se ultiliza modal, existe o seguinte componente:

      	<!--   Painel acionamento da Modal de "Carregando" 	    --> 
		<a4j:status onstart="Richfaces.showModalPanel('ajaxLoadingModalBox')" 
         onstop="Richfaces.hideModalPanel('ajaxLoadingModalBox')" id="a4jStatusId"/>

        <rich:modalPanel id="ajaxLoadingModalBox" minHeight="70" minWidth="120" height="60" width="120" zindex="2000" 
            resizeable="false" moveable="false" > 
            <h:graphicImage value="/img/ajax-loader.gif" id="imagemCarregandoId"/>
            <h:outputText value=" Carregando..." id="txtlabelCarregandoA4j"/>
        </rich:modalPanel>

O que acontece, no momento que ocorrer qualquer evento ajax dentro do REGION (é importante ele estar dentro do region), sera acionado este componente " a4j:status " e ele abre o modal que ai no exemplo coloquei um gif que fica girando, e quando termina o evento é acionado o evento " onstop " do componente a4j:status que no meu exemplo fecha o modal.

Bele? Espero ter ajudado.

T+

Fabio Santos

Tem mais uma questao que esqueci de falar, vc nao vai poder ultilizar h:commandButton tera que ultilizar a4j:commandButton, ouuuuu vc ultiliza um componente a4j:support
dentro do h:commandButton. Bele?

Falou

obrigado por responder,

tentei o seguinte codigo:

<a4j:region id="regionGerarRelatorio">
       <h:commandButton id="btGerarRelatorio" value="Gerar Relatório"
		action="#{academicoAction.geraRelatorio}"
		style="width: 150px;"
		reRenderAfterComplete="formRelatorios">
									
		<f:setPropertyActionListener value="#{org.jboss.seam.document.documentStore.newId()}" 
			target="#{academicoAction.docId}"/>
											
		<a4j:support event="onclick"
			status="carregando">
		</a4j:support>
									
	</h:commandButton>	
										
</a4j:region>
								
<a4j:status id="carregando" for="regionGerarRelatorio"
	onstart="Richfaces.showModalPanel('painelCarregando')"
	onstop="Richfaces.hideModalPanel('painelCarregando')">
</a4j:status>

continua aparecendo a caixa de download do browser mas o modalPanel nao
alguem pode me ajudar?

Faça como o colega falou, como não pode o button, então tenta: a4j:commandLink .
Ele permite onclick e oncomplete. Depois você estiliza ele como botão no CSS.

tentei com o a4j:commandLink e nao funcionou

Eu preciso usar o h:commandButton porque, somente com ele, eu consigo fazer o browser forçar o download do relatorio.

Quando eu utilizo ajax, o browser abre a pagina nele mesmo, toda desconfigurada.

mais ideias?

A solução foi usar javascript

javascript:

<script language="javascript" type="text/javascript">

				onblur = function escondeLoading(){
					if (document.getElementById('loading').style.visibility=="visible"){
						document.getElementById('loading').style.visibility="hidden";
					}
				}
	
				function mostraLoading(){
					if (document.getElementById('loading').style.visibility=="hidden"){
						document.getElementById('loading').style.visibility="visible";
					}				
				}							
				
			</script>

tive de usar o

ao invés do rich:modalPanel
<div id="loading" style="width: 200px;
				background-color: #FFEEAA;  
				position: fixed; 
				left: 50%; 
				margin-left:-100px;  
				text-align: center; 
				color: #FF2415;   
				font-weight: bold;  
				border: 2px solid #6A6A6A;
				visibility: hidden;">
				<center>
					<div>
						<br/><br/>
						<img src="../recurso/geral/imagem/carregando.gif" alt="carregando" /><b style="font-family: 16px">Gerando Relatório...</b>
						<br/><br/><br/>
					</div>
				</center>			
			</div>	

chamada do botão Gerar Relatório

<h:commandButton id="btGerarRelatorio" value="Gerar Relatório"
									action="#{academicoAction.geraRelatorio}"
									style="width: 150px;"
									onclick="mostraLoading();">
								
									<f:setPropertyActionListener value="#{org.jboss.seam.document.documentStore.newId()}" 
										target="#{academicoAction.docId}"/>
								
								</h:commandButton>