Erro ao usar response.getOutPutStream no meu MB para efetuar download de relatório

0 respostas
G

Pessoal,

estou usando uma api chamada poi para gerar um relatório em excel e estou retornando esse relatório para o cliente manipulando o retorno direto no meu HttpServletResponse.
o problema é que ao fazer isso eu acabo interferindo no ciclo de vida comum do componente ajax do rich e aí ele para de funcionar.
o meu chega a executar o onstart, mas aí ele para e não tem mais o retorno, não é executado o que está definido no onstop.
alguém já passou por isso ou sabe uma possível solução?

meu ajax está assim:
<a:region> 
                <a:commandButton  
                    render="@form" 
                    execute="@region" 
                     
                    value="Gerar RelatórioF" 
                    actionListener="#{acoesRealizadasMB.gerarRealatorio}"  
                    immediate="true"  /> 
                 </a:region> 
                <h:commandButton type="button" value="Fechar" 
                    onclick="closeFrame();" immediate="true" /> 
                     
<rich:popupPanel id="mpStatusF" modal="true" moveable="true" resizeable="false" followByScroll="false" width="80" height="70"> 
    <div align="center"> 
        <div> 
            <h:graphicImage value="/images/loading.gif" alt="Carregando" /> 
        </div> 
        <div> 
            <h:outputText value="#{message['aguarde']}" /> 
        </div> 
    </div> 
</rich:popupPanel> 
 
<a:status id="teste" onstart="#{rich:component('mpStatusF')}.show()" onstop="#{rich:component('mpStatusF')}.hide()" />
no meu mb eu executo o seguinte:
private void enviarRelatorio(HSSFWorkbook wb) throws IOException { 
    FacesContext context = FacesContext.getCurrentInstance(); 
    HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse(); 
    response.setDateHeader("Expires", 0); 
    response.setHeader("Content-Disposition", "attachment; filename=acoesRealizadas.xls"); 
    response.setContentType("application/octet-stream"); 
    ServletOutputStream servletOutputStream = response.getOutputStream(); //é aqui que está o problema. o rich chama esse cara internamente...
    wb.write(servletOutputStream); 
    servletOutputStream.flush(); 
    servletOutputStream.close(); 
    context.responseComplete(); 
}
Criado 11 de junho de 2012
Respostas 0
Participantes 1