Primefaces + Ajax + Javascript

2 respostas
D

Tenho um cronometro regressivo que mostra quando a sessão do usuário irá expirar.
Como faço para quando chegar em 0:00 e mostrar a mensagem “Sessão expirada”, algum componente do primefaces saber disso e chamar um método em uma classe que destrói a sessão? Isso é possível?

relogio.js

<div id="cronometro_div">Sua sessão expirará em: <span id="cronometro"></span></div>
		
<Script language="javascript">
var minutos=5;
var seconds=00;
var campo = document.getElementById("cronometro");
var campo_div = document.getElementById("cronometro_div");

function startCountdown()
{
	if (seconds<=0){  
		seconds=60;
		minutos-=1;
	 } 
	 if (minutos<=-1){ 
		seconds=0;
		seconds+=1;
		campo.innerHTML="";
		campo_div.innerHTML="Sessão expirada!";
	 } else{ 
		seconds-=1
		if(seconds < 10) {
			seconds = "0" + seconds;
		} 
		campo.innerHTML = " " + minutos+"min"+seconds;
		setTimeout("startCountdown()",1000); 
	}  
}		 
startCountdown();
</Script>

2 Respostas

D

De primeira pensei em um workaround, provavelmente deve ter uma solução mais elegante, mas…

Tu pode criar um <p:commandButton/> com um actionEvent apontando para o metodo que destrói a sessão com display=hidden, ou seja, um botão invisível. Quando chegar em 0:00 você da um idBotao.click();

D

Diego, tentei fazer como vc disse, mas sem sucessso.

Fiz assim:
relogio.js

...
// tentei assim também: document.getElementById("botao").click();
botao.click()
...

index.xhtml

<p:commandButton id="botao" action="#{bean.sair}" value="" />

O componente commandButton não possui o atributo “display=hidden” como vc mencionou…
Tem alguma sugestão?

Criado 27 de fevereiro de 2012
Ultima resposta 28 de fev. de 2012
Respostas 2
Participantes 2