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); } } |
注:本人推荐使用第二种