У меня есть отчет Jasper, который генерирует файл Excel и выводит его в качестве байта [], я хочу, чтобы файл отображался как загрузка в браузере, но на данный момент он просто печатает необработанное кода в браузер.Set byte [] скачать как файл
Соответствующая часть кода ниже, это инициируется из запроса 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();
}
Любые идеи, где я неправильно?
Спасибо за предложение Stefano, я попробовал, но он все еще просто отображает необработанный код на веб-странице – DaveB