[RESOLVIDO] JSF tela Carregando

Pessoal

Preciso implementar uma tela de “carregando” enquanto o server realiza alguns calculos. Estou utilizando trinidad. Por favor, me ajudem. Seguem meus fontes.

<script language="JavaScript">

function loader(state)
{
  var busy = state == TrRequestQueue.STATE_BUSY;
  var div = document.getElementById("load");
  div.style.display = busy ? "inline" : "none";
  if(!busy)
  {
    TrPage.getInstance().getRequestQueue()
    .removeStateChangeListener(loader);
  }
}

function addListener(){
	var requestQueue = TrPage.getInstance().getRequestQueue();
	requestQueue.addStateChangeListener(loader);
}

</script>

<div id="load"
style="display: none; background-color: red; font-size: large; width: 130px; position: absolute">

LOADING...

</div>

<tr:commandLink id = "btnPesquisar" action="success_ocorrencia" onclick="addListener();">
	<tr:image source="/imagens/icon_pesquisa.png" width="24" height="24" />
</tr:commandLink>	

Galera

O problema pode ser resolvido com richFaces da seguinte maneira:

<rich:modalPanel id="panelStatus" autosized="true">
	<h:graphicImage url="/imagens/carregando.gif" style="border:0px" />
	<h:outputText value="#{msg.principal_carregando}"/>
</rich:modalPanel>

	<a4j:status id="statusCarregarModalPanel"
		onstart="Richfaces.showModalPanel('panelStatus');"
		onstop="#{rich:component('panelStatus')}.hide()" />

Mais detalhes no link http://luisfelipevs.wordpress.com/2009/06/24/utilizando-o-a4jstatus/.

Entretanto, como utilizo MyFaces Trinidad, estava tendo problema de compatibilidade com o component do RichFaces (Erro de PPR). Para solucionar o problema deixei o monitoramento do Request com o trinidad e a exibição da imagem .gif (carregando) com o rich:modalPanel, tendo javascript como intermediário.

Segue a solução:

<script language="JavaScript">

function loader(state)
{
  var busy = state == TrRequestQueue.STATE_BUSY;

  if (busy){
	  Richfaces.showModalPanel("painelCarregando");
  }else{
	  Richfaces.hideModalPanel("painelCarregando");
  }
	
  if(!busy)
  {
    TrPage.getInstance().getRequestQueue()
    .removeStateChangeListener(loader);
  }
}

function addListener(){
	var requestQueue = TrPage.getInstance().getRequestQueue();
	requestQueue.addStateChangeListener(loader);
}

</script>

<rich:modalPanel id="painelCarregando" autosized="true">
	<h:graphicImage url="/imagens/carregando.gif" style="border:0px" />
	<h:outputText value="#{msg.principal_carregando}"/>
</rich:modalPanel>

<tr:selectOneChoice id="projeto" required="true" immediate="true"
							partialTriggers="colaborador" autoSubmit="true" contentStyle="width: 400px"
							valueChangeListener="#{sessionBean.valueChangeListener}"
							value="#{sessionBean.projeto}" label="#{msg.registrarAtividade_projeto}:" onchange="addListener();">
							<t:selectItems value="#{colaboradorBean.listaProjetosAlocados}"
								var="projeto" itemLabel="#{projeto.nomeCompleto}" itemValue="#{projeto}"/>
</tr:selectOneChoice>

Reparem que addListener() foi chamado no evento onchange da combo. Verifique o evento correspondente do seu component.

Abraços