我正在尝试以excel格式导出数据库的结果集。我正在使用JSF开发一个Web应用程序。所以我需要的是当用户点击我页面中的EXPORT按钮时,必须打开一个文件保存对话框,供用户选择目录路径和文件名。
当在文件对话框中单击保存时,我需要根据用户输入将整个结果集写入excel表,其中包含提到的名称和路径。
但是我找不到文件保存对话框以及如何在JSF中使用它。我正在使用jdeveloper进行开发。
请建议我一个解决方案。
答案 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();
}