jsf利用ireport开发报表的时候爆发:java.lang.IllegalStateException错误

来源:互联网 发布:淘宝客采集网站 编辑:程序博客网 时间:2024/05/29 02:21

最近在学习报表的时候,主要用的架构是:jsf+spring +iBATIS,报表用的工具是ireport +Jasperreport 

在导出的时候使用Response对象对客户端进行输出字符,主要的代码有:

 

 

public void Backingbean(){

 

//在jsf的backingbean中使用Response与request.

FacesContext faces=FacesContext.getCurrentInstance();
HttpServletResponse response=(HttpServletResponse)faces.getExternalContext().getResponse();
HttpServletRequest request=(HttpServletRequest)faces.getExternalContext().getRequest();

......

......

//利用jasperreport生成pdf报表

byte[] bytes=JasperRunManager.runReportToPdf(path1,null,conn);//path1为报表模板文件位置
    response.setContentType("application/pdf");
    response.setContentLength(bytes.length);
    ServletOutputStream outStream = response.getOutputStream();
    outStream.write(bytes,0,bytes.length);
    outStream.flush();
    outStream.close();
    conn.close();
 }

 运行测试项目后报表是能导出,但是后台始终爆发一个错误:

java.lang.IllegalStateException: Cannot forward after response has been committed

 

找了好久都没有找到答案.最后终于将答案从信息海洋中给抠了出来,原来在将输出流关闭以后再加上一句:


    faces.responseComplete();

 

就什么事情都没有了....

 

希望能给初学jsf者一点提示.....

 

原创粉丝点击