Destruir sessão de um @sessionScoped

396 views
Skip to first unread message

Marcos Filho

unread,
May 21, 2013, 6:59:34 AM5/21/13
to caelum-...@googlegroups.com
Bem, preciso manipular um component do tipo session scoped de modo que
se ele sair de uma determinada pagina ele seja destruido, porem tenho
outros componentes em sessao que não podem ser destruidos, queria
saber como por exemplo poderia pegar um

@Component
@SessionScoped
public class EmpresasWeb {
private List<Company> Companies;
public EmpresasWeb() {
}
}

e destruir a sessao somente desse componente pra mim, bem, quando se
vai colocar algum objeto na sessao, é definido um atributo para o
mesmo, porem não sei como isso é feito por de baixo dos panos pelo
vraptor entao queria saber como isso é possível.

Carlos Alberto Junior Spohr Poletto

unread,
May 21, 2013, 7:05:21 AM5/21/13
to caelum-...@googlegroups.com
Bom, você pode ter uma lógica determinada que é acessada por um link, ou então um Interceptor para "triggar" um determinado momento/situação para mexer nesse seu componente..

Tudo o que está dentro dele está em escopo de sessão, logo você necessita apenas limpá-lo. Exemplo:


@Component
@SessionScoped
public class EmpresasWeb{
   //..esse seu código..

   public void remove(Company c){
      this.companies.remove(c);
      // ou algum outro tratamento.
   }

}

Lembre-se que a session é por navegador.



2013/5/21 Marcos Filho <mar...@ffm.com.br>

--
You received this message because you are subscribed to the Google Groups "caelum-vraptor" group.
To unsubscribe from this group and stop receiving emails from it, send an email to caelum-vrapto...@googlegroups.com.
To post to this group, send email to caelum-...@googlegroups.com.
Visit this group at http://groups.google.com/group/caelum-vraptor?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.





--
Atenciosamente,
Carlos Alberto Junior Spohr Poletto

Marcos Filho

unread,
May 21, 2013, 7:08:26 AM5/21/13
to caelum-...@googlegroups.com
Minha ideia principal é que vai haver um interceptor que vai cuidar
disso pra mim, só que eu não sei como "remover" esse componente da
sessão e o pior, coloca-lo na sessão novamente. é atraves desse
.remove (é assim o comando?) para remover.

Em 21 de maio de 2013 08:05, Carlos Alberto Junior Spohr Poletto
<carlos...@gmail.com> escreveu:

Carlos Alberto Junior Spohr Poletto

unread,
May 21, 2013, 7:12:01 AM5/21/13
to caelum-...@googlegroups.com
Isso sim, 

Pense como uma lógica de usuários autenticados...quando o cara faz login com nome e senha válidos, você cria uma sessão pra ele...é uma classe com as anotações @Component e @SessionScoped... e tudo que tem dentro fica na sessão servidor x browser


2013/5/21 Marcos Filho <mar...@ffm.com.br>

Marcos Filho

unread,
May 21, 2013, 7:17:19 AM5/21/13
to caelum-...@googlegroups.com
Carlos, quanto a essa logica eu estou entendendo perfeitamente porem o
que eu ainda não sei é como "remover" um determinado componente, deixa
eu ser mais especifico, quando vou colocar um objeto na sessao faço um
setAttribute("objeto", teuObjeto); e isso basicamente o @sessionscope
faz pra mim (pelo menos acho que é essa a ideia) só que nao sei como
efetuar o session.removeAttribute("objeto");

Em 21 de maio de 2013 08:12, Carlos Alberto Junior Spohr Poletto

Marcos Filho

unread,
May 21, 2013, 7:25:57 AM5/21/13
to caelum-...@googlegroups.com
Carlos, encontrei um bom material falando mais detalhadamente a
respeito disso aqui no guj:
http://www.guj.com.br/java/273530-vraptor-adicionarremover-component-na-session#1593862

vou tentar fazer o mesmo, seguir a ideologia, meu unico medo é que
tenha novas formas de fazer isso mais facilmente e eu possa estar
colocando muito codigo a toa nesse componente.

Carlos Alberto Junior Spohr Poletto

unread,
May 21, 2013, 7:29:45 AM5/21/13
to caelum-...@googlegroups.com
Quando você usa os @SessionScoped, o você abstrai isso pra você ;)


2013/5/21 Marcos Filho <mar...@ffm.com.br>

Marcos Filho

unread,
May 21, 2013, 7:35:04 AM5/21/13
to caelum-...@googlegroups.com
tá, ok, mais me diz como eu faço pra destruir esse @sessionScoped? em
especifico ele?

Em 21 de maio de 2013 08:29, Carlos Alberto Junior Spohr Poletto

Carlos Alberto Junior Spohr Poletto

unread,
May 21, 2013, 7:59:36 AM5/21/13
to caelum-...@googlegroups.com
Você não mata a classe que está anotada com @SessionScoped, mas sim os seus atributos internos.


2013/5/21 Marcos Filho <mar...@ffm.com.br>

Marcos Filho

unread,
May 21, 2013, 8:07:08 AM5/21/13
to caelum-...@googlegroups.com
ahh, entendi , como eu poderia matar um atributo? existe algum padrão
que o vraptor adota para setar os nomes dos atributos na sessao?

Em 21 de maio de 2013 08:59, Carlos Alberto Junior Spohr Poletto

Carlos Alberto Junior Spohr Poletto

unread,
May 21, 2013, 8:13:10 AM5/21/13
to caelum-...@googlegroups.com
Você não precisa se preocupar com isso, por isso que o VRaptor já abstrai essa lógica...



2013/5/21 Marcos Filho <mar...@ffm.com.br>

Marcos Filho

unread,
May 21, 2013, 8:25:20 AM5/21/13
to caelum-...@googlegroups.com
Mais é pq eu vou precisar destruir um determinado atributo da sessão
quando ocorrer um determinado evento aqui na minha aplicação,

Em 21 de maio de 2013 09:13, Carlos Alberto Junior Spohr Poletto

Marcos Filho

unread,
May 21, 2013, 1:08:50 PM5/21/13
to caelum-...@googlegroups.com
essa aqui é minha classe:

@Component
@SessionScoped
public class EmpresasWeb {
private final HttpSession session;
private List<Empresa> empresas = new ArrayList<Empresa>();

public EmpresasWeb(HttpSession session) {
this.session = session;
}
public void inserirEmpresaNaSessao() {
this.session.setAttribute("empresas", empresas);
}
public void removerEmpresaDaSessao() {
this.session.removeAttribute("empresas");
}
@SuppressWarnings("unchecked")
public List<Empresa> recuperarEmpresaDaSessao() {
List<Empresa> empresas = (List<Empresa>)
this.session.getAttribute("EmpresaWeb");
return empresas;
}

public List<Empresa> getEmpresas() {
return empresas;
}

public void setEmpresas(List<Empresa> empresas) {
this.empresas = empresas;
}
public void limpaLista() {
this.empresas.clear();
}
}

e eu queria remover o atributo private List<Empresa> empresas = new
ArrayList<Empresa>(); da sessão, é possível?

Chico Sokol

unread,
May 21, 2013, 1:10:08 PM5/21/13
to caelum-...@googlegroups.com
Você não pode usar o setEmpresas? Tipo setEmpresas(new ArrayList..)



--
Chico Sokol


2013/5/21 Marcos Filho <mar...@ffm.com.br>

Marcos Filho

unread,
May 21, 2013, 1:17:51 PM5/21/13
to caelum-...@googlegroups.com
o problema é que o professor quer que remova o objeto da sessao, na
verdade eu estava fazendo mais pratico que isso, estava somente dando
um Clear() nessa lista com um interceptor até ae tudo bem, o problema
é que ele quer que remova, e vi que o vraptor me ajuda bacana para
inserir, mas caso eu queira remover, ele nao me ajuda em nada, é como
se ele somente inserisse e não removesse.

se pelo menos eu soubesse com que nome de atributo ele se encontra no
getSession.getAttribute() poderia facilitar pq dá pra "matar" esse
atributo, o problema é que nao tem uma convenção digamos assim e o
pior, nao sei se pode inserir novamente depois de matar esse atributo.

Eldio Santos Jr.

unread,
May 21, 2013, 6:37:06 PM5/21/13
to caelum-...@googlegroups.com
Marcos, não sei9 se eu entendi o seu problema...

Mas se entendi, o que você quer é apenas remover a lista inteira (estou correto?)...

Se for isso, você apenas limpa a lista do seu objeto SessionScoped...

Até onde sei a ideia é você criar um objeto que vai encapsular as suas informações de sessão, não as informações em si... Assim, quando você quer remover as informações da sessão você as remove do seu encapsulamento, mas o encapsulamento continua lá, apenas vazio...
Não sei se consegui ser claro o suficiente na explicação, mas acho que o clear em si já resolve o seu problema (como no código abaixo)...

@Component
@SessionScoped
public class EmpresasWeb {
     private List<Company> Companies;

     public EmpresasWeb() {
     }

     public void removeCompanies(){
          Companies.clear();
     }
} 

Eldio Santos Junior
Tel.: (21) 8884-3757
Skype: eldiojr
Twitter: @eldius
Página pessoal: http://eldiosantos.net
                        http://eldiosantos.net/sobre/ 
Email/GTalk: eldio...@gmail.com

Marcos Filho

unread,
May 22, 2013, 12:05:03 PM5/22/13
to caelum-...@googlegroups.com
na verdade ja consegui, eu setei diretamente na session o attribute e
fiz o controle para remover, de forma que ele Simula um @viewScope ou
seja, essa sessao só eh valida enquanto a pagina estiver aberta.
Reply all
Reply to author
Forward
0 new messages