Pessoal estou com a seguinte situação. Tenho um managedBean com scopo ViewScope.
Na minha página tenho um botão que dispara um processo em um ActionListener que é um loop e esse loop fica ate eu clicar em outro botão que faz com que esse loop se encerre.
É algo assim :
[code]private boolean emLoop = true ;
…
while (emLoop) {
…
}
[/code]
O Botão que para o loop quando acionado muda o valor do atributo emLoop para false e ele se encerra.
Meu problema é que se eu estiver no looping e eu fechar o browser ou so a aba da página, o loop continua e ai fica infinitamente porque nunca o valor do atributo emLoop será mudado para false.
No teste que eu fiz eu coloquei um log pra imprimir cada passagem no loop, ai quando fecho o browser sem parar o loop ele fica la rodando, ai se eu chamo a página de novo, e inicio o loop novamente ai eu fico com dois loops. O Antigo e o novo.
Alguém sabe como posso forçar a morte do managedBean quando fecho o borwser ou a aba da pagina ?
Você poderia usar o evento unload do jQuery (http://api.jquery.com/unload/) e na função listener fazer uma chamada ao seu managedBean.
Se vc usar primefaces, o componente remoteCommand pode ser usado. Na documentação deles tem exemplos de como usar esse componente.
Agora, fiquei curioso sobre essa funcionalidade (rs). Esse loop é para que?
Abs!!!
[quote=felipe_gdr]Agora, fiquei curioso sobre essa funcionalidade (rs). Esse loop é para que?[/quote]Também pensei o mesmo.
Por que você não coloca um valor default? Tipo, deu looop 15x para.
[quote=felipe_gdr]
Agora, fiquei curioso sobre essa funcionalidade (rs). Esse loop é para que?
Abs!!![/quote]
É um método que usa o primepush para ficar monitorando um serviço e avisar e atualizar partes da tela.
Na verdade usei o remote comando com o umload do jQuery mas se fechar a aba do browser ele não funciona. So funciona fechando o browser.
Tem certeza que precisa deixar um loop rodando indefinidamente pra pegar atualizações via primefaces push? Nunca usei esse componente, mas no showcase deles não tem loop nenhum:
http://www.primefaces.org/showcase/push/chat.jsf
Acho que tem que ter um loop pq no exemplo do chat eu tenho um canal e todos os browsers quado abrem se conectam nele e usam ele pra enviar suas mensagens. São varios Managed Beans enviando mensagens atraves de metodos separados no mesmo canal. Ou seja cada tela aberta quando clica no botão enviar mensagem chama uma instancia de seu MB e força o envio da mensagem pelo canal de push.
No meu caso meu serviço é um servidor socket que fica enviando mensagens a todo instante ou seja meu manages bean tem que se conectar no socket e ficar escutando todas as mensagens e decidindo através delas o que exibir na tela. Diferente do chat eu tenho que ficar perguntando ao socket a todo momento se tem mensagem, porque o socket envia a mensagem e espera que eu esteja escutando.