我有一个生成Excel文件并输出为byte []的Jasper报告,我希望该文件在浏览器中显示为下载,但此刻它只是将原始代码打印到浏览器.
代码的相关部分如下所示,这是从AJAX请求启动的(页面已经加载):
JasperReport jasperReport; JasperPrint jasperPrint; HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse(); byte[] excel = null; FacesContext facesContext = FacesContext.getCurrentInstance(); try { ArrayList<SwimDataReport> dataList = getData(); if(dataList!=null){ JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(dataList,false); jasperReport = JasperCompileManager.compileReport(reportFile.getPath()); jasperPrint = JasperFillManager.fillReport(jasperReport,parameters,dataSource); JRXlsExporter exporter = new JRXlsExporter(); ByteArrayOutputStream xlsReport = new ByteArrayOutputStream(); exporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,xlsReport); exporter.exportReport(); excel = xlsReport.toByteArray(); response.reset(); response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-disposition","attachment; filename=\"Export.xls\""); xlsReport.close(); OutputStream ouputStream = response.getoutputStream(); ouputStream.write(excel); ouputStream.close(); facesContext.responseComplete(); this.cleanUp(); }else{ return; } } catch (JRException e) { e.printstacktrace(); } catch (Exception e) { e.printstacktrace(); }
我出错的任何想法?
解决方法
看来您无法从AJAX请求下载文件,因此我使用了h:commandButton来触发下载.