【问题标题】:File save dialog in jsf [duplicate]jsf中的文件保存对话框[重复]
【发布时间】:2012-02-09 07:10:45
【问题描述】:

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

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

但我找不到文件保存对话框以及如何将其与 JSF 一起使用。我正在使用 jdeveloper 进行开发。

请给我一个解决方案。

【问题讨论】:

标签: java jsf-2 jdeveloper


【解决方案1】:

关键是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();
}

【讨论】:

  • 保存所有对话框对我来说没有出现,有什么想法吗?
  • 没关系,我将ajax设置为false,解决了这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-17
  • 2011-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多