[RESOLVIDO] Problema rich:progressBar

Olá pessoal, estou tentando fazer com que, ao pesquisar um relatório, durante a consulta e o retorno desta, seja exibido um modalPanel com um rich:progressBar carregando.

[color=brown]Utilizo RichFaces 3.3.3-Final. Jsf 2. Página padrão .jsp.[/color]

Tenho o seguinte código:

Script

<script>
//<![CDATA[
        var counter = 1;
        var intervalID;
            function updateProgress(i) {
                $('form:progressBar').component.setValue(counter*5);
                if ((counter++)>20){
                    clearInterval(intervalID);
                    document.getElementById('button').disabled=false;
                }
            }
            
            function startProgress(){
                counter=1;
                document.getElementById('button').disabled=true;
                $('form:progressBar').component.enable();
                $('form:progressBar').component.setValue(1);
                intervalID = setInterval(updateProgress,1000);
            }
//]]> 
</script>

Botão que chama a consulta e o modalPanel

<f:view>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
            <title>Extrato Contabil - Vallée S/A - GTi</title>
                                                                     
        </head>
        <body>
        
            <h:form id="form">
                .
                .
                .
                <a4j:commandButton id="button" value="Carregar Extrato" style="margin-left: 30px" action="#{bExtratoContabil.acaoPesquisar}" onclick="startProgress" reRender="form" oncomplete="#{rich:component('panel')}.show();"/>
                                        
            </h:form>
                                    
        </body>
    </html>

</f:view>

ModalPanel

<rich:modalPanel id="panel" width="350" height="100">
        <f:facet name="header">
              <h:panelGroup>
                    <h:outputText value="Modal Panel"></h:outputText>
              </h:panelGroup>
        </f:facet>
        <f:facet name="controls">
              <h:panelGroup>
                  <h:graphicImage value="/imgs/fechar.jpg" styleClass="hidelink" id="hidelink"/>
                  <rich:componentControl for="panel" attachTo="hidelink" operation="hide" event="onclick"/>
              </h:panelGroup>
        </f:facet>
        <rich:progressBar mode="client" id="progressBar"></rich:progressBar>   
</rich:modalPanel>

Deste modo, ele exibe o modalPanel quando finaliza a consulta. E ainda assim, exibe o modalPanel sem nada, apenas com a graphicImage fechar.jpg.

Creio que preciso utilizar uma thread para executar este carregar do progressBar com a consulta. Mas como? Alguma Luz?

O que devo fazer?

Resolvido o problema.

Solução: ModalPanel + a4j:status

<rich:modalPanel id="panel_loading" autosized="true">
       <h:graphicImage url="/imgs/loading.gif" style="border:0px; vertical-align: middle;" />
</rich:modalPanel>

<a4j:status id="loading" onstart="Richfaces.showModalPanel('panel_loading')" onstop="Richfaces.hideModalPanel('panel_loading')" />

Botão: a4j:CommandButtom

<a4j:commandButton id="button" value="Carregar Extrato" style="margin-left: 30px" actionListener="#{bExtratoContabil.acaoPesquisar}" reRender="form"/>

Pronto!

Pode ser que alguem venha e me pergunte: Onde está o elo entre o botão e o modalPanel?

Resposta: Pelo que entendi, o a4j:status atende a toda requisição ajax na página. Logo, toda vez que haver uma requisição ajax na pagina o modalPanel será apresentado. E mais, o tempo de duração do modalPanel é o mesmo tempo gasto pela execução do método chamado no seu a4j:commandButtom.

Funcionou perfeitamente aqui. :slight_smile:

Da uma olhada:

http://www.webxml.com.br

http://safhira.webxml.com.br/safhira/

foram criados com PrimeFaces