[RESOLVIDO]Destruir objeto JSF + Primefaces

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

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.

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?

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

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.

[quote=kleberdamasco]Como assim vc entra no modulo novamente?
vc saiu da página e vou a entrar nela?[/quote]

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…

[quote]
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…[/quote]
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.

@Request

[quote=srmachado][quote]
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?
[/quote]

@Request[/quote]

Obrigado srmachado, vou estudar mais a respeito.

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

vc conseguiu resolver?

[quote=raf_ho]rodrigomarcelo estou com o mesmo problema. não sei como destruir o managedBean quando fecho a aba.

vc conseguiu resolver?[/quote]

Consequi sim… Use o seguinte:

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

Abrass