jsf中的文件保存对话框

时间:2012-01-13 00:50:01

标签: java jsf-2 jdeveloper

我正在尝试以excel格式导出数据库的结果集。我正在使用JSF开发一个Web应用程序。所以我需要的是当用户点击我页面中的EXPORT按钮时,必须打开一个文件保存对话框,供用户选择目录路径和文件名。

当在文件对话框中单击保存时,我需要根据用户输入将整个结果集写入excel表,其中包含提到的名称和路径。

但是我找不到文件保存对话框以及如何在JSF中使用它。我正在使用jdeveloper进行开发。

请建议我一个解决方案。

1 个答案:

答案 0 :(得分:4)

密钥是Content-Disposition响应标头,您需要将其设置为attachment。这将在浏览器中强制执行另存为对话框。您需要做的就是设置一个正确的Content-Type响应头(以便浏览器知道它是什么类型的文件)并将原始文件的内容写入响应主体。

因此,总结(假设您使用Apache POI生成Excel工作表):

public void downloadReport() throws IOException {
    // Prepare Excel file to be downloaded.
    HSSFWorkbook workbook = generateReportSomehow();
    String filename = "yourDefaultFilename.xls";

    // Prepare response.
    FacesContext facesContext = FacesContext.getCurrentInstance();
    ExternalContext externalContext = facesContext.getExternalContext();
    externalContext.setResponseContentType("application/vnd.ms-excel");
    externalContext.setResponseHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");

    // Write file to response body.
    workbook.write(externalContext.getResponseOutputStream());

    // Inform JSF that response is completed and it thus doesn't have to navigate.
    facesContext.responseComplete();
}