Boa tarde Galera,
Minha duvida ta tirando o sono tem uns dias já.rs
Eu tenho um Bean de sessao que serve para um Modal de Pesquisa. Por exemplo, Quando eu quero pesquisar um departamento para um determinado Usuario, abre um modal e pesquisa.
Até ai tudo bem. O meu problema eh o seguinte, como o bean é de sessao, quando o modal eh aberto pela segunda vez, o modal continua todo preenchido, como se eu tivesse ja apertado o botao para pesquisar os departamentos. Eu tentei trocar meu bean para request, mas ele perde os parametros que adiciono para a pesquisa no proprio modal e depois de mostrar os dados de pesquisa na tela, ele perde a lista que foi retornada pelo banco.
Eu tentei usar com o bean de request o a4j:KeepAlive, mas ele manda eu serializar todas as classes, ate mesmo a classe ListDataModel (javax.faces.DataModel).
Alguem tem uma ideia? A melhor coisa ate agora foi o KeepAive, mas nao é possivel serializar todas as classes.
Agradecido pela ajuda.
Abraços.
:?
seta o bean da sessão pra null;
Surfzera, eu ja tentei muito e nao consegui resolver essa parada. Teria como você me dar um exemplo de como fazer isso?
Por exemplo, eu tentei trabalhar com a anotaçao @PreDestroy, mas ela nao executa pq o bean nao eh destruido na sessao.
Se eu zera-lo na sessao no construtor do bean da tela que vai chamar o modal, ele vai ficar sendo zerado toda hora, pq o bean eh construido toda hora.
Me dê uma luz ai por favor.
Obrigado pela ajuda.
session.removeAttribute("seuBean") ;
e se você criar um metodo para chamar e zerar a hora que precisar ?
Vou tentar aki agora o seguinte. Criei um Metodo para retirar o atributo da sessao. Esse metodo sera chamado quando o usuario clicar no link para abrir o modal. Estou testando agora.
Opa galera, Fiz o teste e consegui fazer como vocês disseram. Criei um metodo para remover o atributo (bean) da sessao. Eu chamo esse metodo no action do commandLink quando o usuario clica para abrir o modal.
Muito obrigado pela a ajuda.
[quote=francis.junio]Opa galera, Fiz o teste e consegui fazer como vocês disseram. Criei um metodo para remover o atributo (bean) da sessao. Eu chamo esse metodo no action do commandLink quando o usuario clica para abrir o modal.
Muito obrigado pela a ajuda.[/quote]
Opa, pode dizer como ficou?? Valeu.
<a4j:commandLink id="btnPesq" action="#{meuBean.destroy}"
oncomplete="Richfaces.showModalPanel('MEUMODAL')"
reRender="MEUMODAL">
<h:graphicImage id="image1" url="/images/search.gif"
style="border:0; height: 17px;" />
</a4j:commandLink>
public Class meuBean extends BaseMB{
public destroy(){
super.destroyAttibuteSession("meuBean");
}
}
public Class BaseMB{
public void destroyAttributeSession(String attribute) {
FacesContext context = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) context.getExternalContext()
.getSession(false);
session.removeAttribute(attribute);
}
}
Tendeu?
Mais ou menos…
O que eu não entendi, foi o pq de vc ter criado um botao específico para destruir a sessão…
No meu caso, eu preciso que a cada botão que eu clicar, ele destrua, limpe ou feche a sessão… lembrando que cada botão já tem uma action específica.
vlw.
[quote=francis.junio]
<a4j:commandLink id="btnPesq" action="#{meuBean.destroy}"
oncomplete="Richfaces.showModalPanel('MEUMODAL')"
reRender="MEUMODAL">
<h:graphicImage id="image1" url="/images/search.gif"
style="border:0; height: 17px;" />
</a4j:commandLink>
public Class meuBean extends BaseMB{
public destroy(){
super.destroyAttibuteSession("meuBean");
}
}
public Class BaseMB{
public void destroyAttributeSession(String attribute) {
FacesContext context = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) context.getExternalContext()
.getSession(false);
session.removeAttribute(attribute);
}
}
Tendeu?[/quote]
Eu nao criei um botao somente para limpar o atributo da sessao… Esse botao abre um modal para pesquisas…
O que eu fiz foi… Como esse botao nao vai ter nenhuma action, ou seja, nao vai executar metodos especificos na minha aplicaçao, eu coloquei no action dele para ele destruir o atributo na sessao…
Eu tenho outros botoes que tem actions, ai eu fui trocando a maneira de usar o metodo para destruir o objecto na sessao.
Oq vc pode fazer tb é colocar um bloco
try{
//executa suas coisas....
}catch(Exception ex{
}finally{
//super.destroyAttributeSession("nomeDoAtributoNaSessao")....
}
Isso fará que ao termino da sua action, ele vai destruir o que voce precisar na sessao…
Ai vc vê a melhor hora de chamar o seu metodo para destruir e depois dá um reRender aonde vc quiser tb…
Qualquer coisa manda ai…
[quote=Kleber-rr]Mais ou menos…
O que eu não entendi, foi o pq de vc ter criado um botao específico para destruir a sessão…
No meu caso, eu preciso que a cada botão que eu clicar, ele destrua, limpe ou feche a sessão… lembrando que cada botão já tem uma action específica.
vlw.
[/quote]
Vc pode criar um RequestListener. Para cada requisição que entrar no servidor vc rastreia e faz oq mais for do seu agrado! [=