java导出excel报错:getOutputStream() has already been called for this response

对于 java 导出 excel 报错的问题,查了很多都说是在使用完输出流以后调用以下两行代码即可

1
2
out.clear();
out = pageContext.pushBody();

但这也许是页面上输出时可能犯的错,最后查了很多,终于解决,具体方法如下:

这个下载 excel 的方法返回一个 ActionForword 对象,比如:

而 response 是 ActionForword 对象的参数,所以就会使 response 冲突,所以,解决的办法有:

第一种:return null,

第二种:将返回参数改为 void, 去掉返回值,也就是将上面的代码修改如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public void downloadFile(){
    try{   
        ExportInfo exportInfo = exportInfoService.getExportInfo(exportId);
        setAttribute("exportInfo", exportInfo);
        File file = new File(exportInfo.getFilePathname());
        if (file.exists()) {
            HttpServletResponse response =ServletActionContext.getResponse();
            DownloadUtil.downloadFile(file.getName(), file, response);
            //file.delete();
        }
    } catch (DolException e) {
            logger.error(e.toString(), e);
    } catch (Exception e) {
            logger.error(e.toString(), e);
    }  
}

注:本人推荐使用第二种