- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
当我在 spring 应用程序中使用 AbstractExcelView 创建和下载文件时,它将下载为 .html 文件。但是当我手动将其扩展名更改为 .xls 时,它会显示预期结果。我的 AbstractExcelView 代码是:
公共(public)类 ExcelRevenueReportView 扩展了 AbstractExcelView {
@Override
protected void buildExcelDocument(Map model, HSSFWorkbook workbook,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
Map<String, String> revenueData = (Map<String, String>) model
.get("revenueData");
// create a wordsheet
HSSFSheet sheet = workbook.createSheet("Revenue Report");
HSSFRow header = sheet.createRow(0);
header.createCell(0).setCellValue("Month");
header.createCell(1).setCellValue("Revenue");
int rowNum = 1;
for (Map.Entry<String, String> entry : revenueData.entrySet()) {
// create the row data
HSSFRow row = sheet.createRow(rowNum++);
row.createCell(0).setCellValue(entry.getKey());
row.createCell(1).setCellValue(entry.getValue());
}
}
上下文配置文件:dispatcher-servlet.xml是
<beans:bean name="/index.html" class="com.my.report.HomeController">
</beans:bean>
<beans:bean class="org.springframework.web.servlet.view.XmlViewResolver">
<beans:property name="location" value="/WEB-INF/spring-excel-views.xml" />
<beans:property name="order" value="0" />
</beans:bean>
最佳答案
谈到 HTTP 和 Web 应用程序(无论是否为 spring),有很多选择。
一些想法:
1 - 强制显示“另存为”对话框,使用户能够按需要保存文件(可能重命名文件及其扩展名)。
这可以通过将 HTTP“content-type” header 设置为“application/octet-stream”来实现。这从字面上告诉浏览器数据是未知类型的字节流。这使浏览器“理解”它要由另一个应用程序打开/处理。因此,浏览器允许您保存文件。
您只提供了 buildExcelDocument View 管理器代码。虽然不能真正说明在此方法之前或之后执行了哪些代码,但设置此 HTTP header 的一种方法是简单地使用“HttpServletResponse”对象:
response.setHeader("Content-Type", "application/octet-stream");
另一种(更丑陋的)方法是将其硬编码到 XML/HTML View 中:
<meta http-equiv="Content-Type" content="application/octet-stream />
如果您的系统有一个页面的唯一目的是下载文件,这可能会很好用。如果你用大块构建你的 View ,并且你只有一个主 http 页面,强制使用元标记会弄乱其他 View 。
2 - 您还可以通过强制给定文件名来设置扩展名。
您可以按照与第一个建议相同的方式完成它:通过设置特定的内容配置 HTTP header :
// Set file name and extension
response.setHeader("Content-Disposition", "inline; filename=yourExcelFile.xls");
这会将流设置为按照您指定的文件名和扩展名正确下载。
同样,这可以直接放在 HTML/XML/JSP/JSF(或任何技术)本身中,但这不是最佳解决方案。
我会采用“setHeader”方式,同时使用这两种想法:
// Force save-as dialog:
response.setHeader("Content-Type", "application/octet-stream");
// Set file name and extension
response.setHeader("Content-Disposition", "inline; filename=yourExcelFile.xls");
关于java - 使用 AbstractExcelView 下载为 .html 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10926821/
如何使用 spring AbstractExcelView 在 portlet 中生成 excel 文件 谢谢山姆 最佳答案 请参阅Spring Reference . 关于java - 从 port
据我了解,AbstractExcelView 类函数 buildExcelDocument 不支持 XSSFWorkbook ( https://jira.spring.io/browse/SPR-6
我想在基于 Spring-Boot 的应用程序中实现将数据导出到 Excel 文件。 当我打算使用 AbstractExcelView ,但我知道 AbstractExcelView 已被弃用。导出
我正在使用 spring 的 ContentNegotiatingViewResolver 将数据导出到 Excel 文件。这在 Chrome 和 FireFox 中完美运行,但是在 IE 中,资源管
我正在尝试使用 AbstractExcelView 来提供我在服务器上创建的 XLS 文档。有没有办法可以将其与已构建的工作簿一起使用?我尝试了以下方法,但不起作用: import java.io.F
当我在 spring 应用程序中使用 AbstractExcelView 创建和下载文件时,它将下载为 .html 文件。但是当我手动将其扩展名更改为 .xls 时,它会显示预期结果。我的 Abstr
这是我的 ExcelController.java public ModelAndView generateExcel(HttpServletRequest request, Http
我是一名优秀的程序员,十分优秀!