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