Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将字节[]设置为下载为文件_Java_Http Headers_Jasper Reports_Bytearray_Seam - Fatal编程技术网

Java 将字节[]设置为下载为文件

Java 将字节[]设置为下载为文件,java,http-headers,jasper-reports,bytearray,seam,Java,Http Headers,Jasper Reports,Bytearray,Seam,我有一个Jasper报告,它生成一个Excel文件并以字节[]的形式输出,我希望该文件在浏览器中显示为下载,但目前它只是将原始代码打印到浏览器中 代码的相关部分如下所示,这是从AJAX请求启动的(页面已经加载): JasperReport-JasperReport; 茉莉花; HttpServletResponse=(HttpServletResponse)context.getExternalContext().getResponse(); 字节[]excel=null; FacesConte

我有一个Jasper报告,它生成一个Excel文件并以字节[]的形式输出,我希望该文件在浏览器中显示为下载,但目前它只是将原始代码打印到浏览器中

代码的相关部分如下所示,这是从AJAX请求启动的(页面已经加载):

JasperReport-JasperReport;
茉莉花;
HttpServletResponse=(HttpServletResponse)context.getExternalContext().getResponse();
字节[]excel=null;
FacesContext FacesContext=FacesContext.getCurrentInstance();
试一试{
ArrayList dataList=getData();
如果(数据列表!=null){
JRBeanCollectionDataSource=新的JRBeanCollectionDataSource(数据列表,false);
jasperReport=jasprocmpilemanager.compileReport(reportFile.getPath());
jasperPrint=JasperFillManager.fillReport(jasperReport,参数,数据源);
JRXlsExporter=新的JRXlsExporter();
ByteArrayOutputStream xlsReport=新建ByteArrayOutputStream();
exporter.setParameter(jreporterParameter.JASPER_PRINT,jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_流,xlsReport);
出口商。出口报告();
excel=xlsReport.toByteArray();
response.reset();
response.setContentType(“application/vnd.ms excel”);
setHeader(“内容处置”、“附件;文件名=\”Export.xls\”);
xlsReport.close();
OutputStream=response.getOutputStream();
outstream.write(excel);
uputstream.close();
facesContext.responseComplete();
这个.cleanUp();
}否则{
返回;
}
}捕获(JRE){
e、 printStackTrace();
}捕获(例外e){
e、 printStackTrace();
}

你知道我哪里出错了吗?

我的工作代码类似于这个,上面有一个大写的D

i、 e.:
内容处置
而不是
内容处置


这也是强制执行的方式。

您似乎无法从AJAX请求下载文件,因此我使用了h:commandButton来触发下载。

尝试使用
a4j:htmlCommandLink
触发下载请求,并在标记中给出
target=“\u NEW”

Excel文件的内容类型为:

对于BIFF.xls文件:应用程序/vnd.ms excel

对于Excel2007和更高版本的.xlsx文件:application/vnd.openxmlformats of icedocument.spreadsheetml.sheet

代替: “内容处置”、“附件;文件名=\”导出.xls\“

尝试使用:
“内容配置”、“附件;文件名=Export.xls

谢谢你的建议Stefano,我试过了,但它仍然只是在网页中显示原始代码
    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();
    }