[RESOLVIDO]Destruir objeto JSF + Primefaces

10 respostas
R

Bom dia Senhores,

Estou com uma dificuldade aqui, que penso não ser muito complexa, eis o cenário:

Tenho um p:tabView, com p:tab’s dinâmicas, criadas a partir de uma coleção no bean, tudo funcionando “perfeitamente”. Minhas abas são closable, ou seja, tem o botão de fechar a aba.

Tenho um listener no evento tabClose da tabView, que remove a aba da coleção, tudo ok.

No entanto, quando eu chamo o módulo novamente, ele volta na mesma condição que tinha antes de ser fechado, ou seja, sua bean não foi destruida e coletada pelo garbage collector.

Como faço pra “matar” essa bean? São todas @ViewScoped

10 Respostas

S

Isso acontece justamento por conta do @ViewScoped, aconselho da uma olhada sobre esse escopo, mais basicamente seu bean só sera destruido quando você sair da página.

R

Já li várias vezes sobre, e a princípio, entendo seus funcionamentos. Ao meu ver, sendo eu iniciante nesta tecnologia, ViewScoped me pareceu o mais viável para esta situação, qual seria então mais indicada?

K

Como assim vc entra no modulo novamente?
vc saiu da página e vou a entrar nela?

L

Das duas uma ou você altera o escopo do seu mb para request ou o que eu acho menos indicado dá um new nos objetos assim ele destroi o estado anterior. Entretanto tudo isso dependerá do que você pretende fazer.

R

kleberdamasco:
Como assim vc entra no modulo novamente?
vc saiu da página e vou a entrar nela?

Trabalho com abas em um p:tabView, quando fecho uma aba, gostaria que a bean fosse liberada da memória, “entrar no módulo novamente” = adicionar a p:tab da view em questão novamente…

Com isso eu resolveria o problema da view voltar ao estado que tinha anteriormente, mas o que quero evitar é o fato dessa bean estar ocupando memória do meu servidor, sendo que já não será mais (até segunda ordem) utilizada pelo meu usuário…

K


Trabalho com abas em um p:tabView, quando fecho uma aba, gostaria que a bean fosse liberada da memória, “entrar no módulo novamente” = adicionar a p:tab da view em questão novamente…

para tentar eu disse tentar liberar a memoria vc teria que anular o objeto e torce para que o GC esteja afim de trabalhar, e para criar novamente e limpar seus atributos você será obrigado a instanciá-lo novamente.

Como você está trabalhando com o viewScoped esse é o precedimento padrão a ser adotado.

S

@Request

R

srmachado:

Já li várias vezes sobre, e a princípio, entendo seus funcionamentos. Ao meu ver, sendo eu iniciante nesta tecnologia, ViewScoped me pareceu o mais viável para esta situação, qual seria então mais indicada?

@Request

Obrigado srmachado, vou estudar mais a respeito.

R

rodrigomarcelo estou com o mesmo problema. não sei como destruir o managedBean quando fecho a aba.

vc conseguiu resolver?

R

raf_ho:
rodrigomarcelo estou com o mesmo problema. não sei como destruir o managedBean quando fecho a aba.

vc conseguiu resolver?

Consequi sim… Use o seguinte:

FacesContext.getCurrentInstance().getViewRoot().getViewMap().remove("nomeDaBean");

Abrass

Criado 25 de janeiro de 2013
Ultima resposta 3 de jun. de 2013
Respostas 10
Participantes 5