Ola, Gostaria de saber como posso limpar os dados da pagina anterior quando estou utilizando Beans de sessão no jsf. Segue um exemplo:
Se eu estiver nessa pagina de produtos:

utilizar a busca ou ate mesmo entrar na opcao de alterar um produto e por ventura aperte no link para fornecedor

executar alguma acao e voltar para produto os dados ainda estaram la, pois o escopo dos beans é de sessao. O que eu gostaria de saber é: Quando eu clicar no link para outra pagina da para limpar tudo q a pagina anterior colocou na sessao utilizando o PhaseListener? ou a solução seria utilizar determinados beans como request?
Exemplo de codigo que poderia ser utilizado, mas nao sei se é a melhor pratica.
public void limpaSessao() {
HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
Enumeration<String> en = session.getAttributeNames();
while (en.hasMoreElements()) {
String name = (String) en.nextElement();
if(!name.equals("usuario")
session.removeAttribute(name);
}
}
//Outra possivel solução
public class Autorizador implements PhaseListener {
public void beforePhase(PhaseEvent event) {
FacesContext contexto = event.getFacesContext();
String paginaAtual = contexto.getViewRoot().getViewId();
//Colocaria o codigo de limpar sessao aqui.
}