Problema com sessao jsf

3 respostas
D

Ola pessoal estou desenvolvendo uma aplicação pra faculdade. Estou usando jsf + riface + jasper.
O consegui fazer um relatório em japer mas estou com problema na minha sessão, quando eu gero vários relatórios e sessão trava, eu ja tentei limpar a sessão mas sem sucesso.
segue o código do minha aplicação

public String geraRelatorio() throws ClassNotFoundException, SQLException {
    RelCursosDao relCursosDao = new RelCursosDao();
    String jasper = getDiretorioReal("/report/relCursos.jasper");
    List<CursosTo> listCursos = null;

    try {

        
            listCursos = relCursosDao.consultar();
        
        JRDataSource jrds = new JRBeanCollectionDataSource(listCursos);
        JasperPrint print = JasperFillManager.fillReport(jasper, null, jrds);
        setSaida(preenchePdf(print));            
    } catch (Exception e) {
        e.printStackTrace();
    }
    return "exibeRelCursos";
}



public String getSaida() {
    return saida;
}

public void setSaida(String saida) {
    this.saida = saida;
}
public String getDiretorioReal(String diretorio) {

HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);

return session.getServletContext().getRealPath(diretorio);

}
public String getContextPath() {
    HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
    return session.getServletContext().getContextPath();
}

public String preenchePdf(JasperPrint print) throws JRException, JRException {
    String saida = null;
    saida = getDiretorioReal("/pdf/relatorio.pdf");
    JasperExportManager.exportReportToPdfFile(print, saida);
    saida = getContextPath() + "/pdf/relatorio.pdf";
    return saida;
}

esse metodo eu uso qdo vou gerar outro relatorio

public void limpaSessao() {
    HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
    session.invalidate();
}

mas sempre trava, alguem ja passou por isso???
Oque eu to fazendo errado?

3 Respostas

marcosharbs

tira esse session.invalidate() talvez teja travando por causa disso, escreva o conteúdo pro usuário depois remova o atributo da sessão usando o session.removeAtribute(“nome do atributo(relatorio na sessao)”) se continuar travando tem que dar uma revizada ou uma debugada dai.

V

O problema esta no session.invalidate(); voce esta matando a sessao do usuario, a aplicacao para de funcionar na hora.

D
tava msm. Valeu pessoal eu achei um jeito de limpar sem matar mas o povo fala q e gambiarra fiz assim

public void limpaSessao() {

HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);

Enumeration en = session.getAttributeNames();

while (en.hasMoreElements()) {

String name = (String) en.nextElement();

session.removeAttribute(name);

}

}
Criado 22 de junho de 2009
Ultima resposta 28 de jun. de 2009
Respostas 3
Participantes 3