返回在servlet中创建的excel文件作为响应

时间:2014-10-13 14:53:49

标签: java jquery sapui5

我已使用Apache POI创建了excel文件,并尝试将其作为对ajax调用的响应返回。我希望浏览器提示"保存创建的文件"窗口。 问题是我在servlet的响应中得到了瑕疵,没有提示或任何提示

我在StackOverflow上发现了类似的问题,但他们问题的解决方案并不适用于我(或者我错过了一些东西)。

Here问题通过使用html标签解决了,但我不能(据我所知)在SAPUI5中使用它们。

here是一个非常类似的案例,我用这个案子,但它仍然无效。

以下是客户端代码:

jQuery.ajax({
            url : "Export",
            type : "post",
            mimeType: 'application/vnd.ms-excel',
            success : function(){
                console.log("data was exported successfully");
            },
            error: function(){

                console.log("error while exporting data");
            },
            complete: function(){
                console.log("exporting data has been completed");
            }
        });

这是servlet的代码:

    response.setContentType("application/vnd.ms-excel");
    response.setHeader("Expires", "0");
    response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
    response.setHeader("Pragma", "public");
    response.setHeader("Content-Disposition", "attachment; filename=ReportsData.xls");
    ServletOutputStream out = response.getOutputStream();
    workbook.write(out); 
    out.flush();
    out.close();

该文件是从数据库创建的,然后选择'在while(result.next())循环中设置了wuery结果。

谢谢!

1 个答案:

答案 0 :(得分:4)

而不是使用ajax尝试在javascript中进行这样的调用。

window.open(("urltoyourservlet"), "_blank");

这将打开一个直接链接到您的servlet的新窗口。然后浏览器应该自动处理基于mime / type下载excel文件的句柄。