java - 如何使用带有 EXTJS 的 Ajax HTTP GET 下载 xlsx?

标签 java ajax extjs

我有一个问题,有些人可能很容易回答...

我有这个 Java 方法:

  @RequestMapping(value = "/exportEditableFields", method = RequestMethod.GET)
  @ResponseStatus(HttpStatus.OK)
  @ResponseBody

  public void exportEditableFields(
  @RequestParam(value = "conversationId") final String conversationId,@RequestParam(
  value = "schoolId") final Long schoolId,
  @RequestParam(value = "schoolAbbreviation") final String schoolAbbreviation,
final HttpServletResponse response) throws IOException {
SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy_hhmm");
School school = schoolService.getSchoolById(schoolId);
String fileName =
    String.format("SDMS-%s-%s-Editable Fields-%s", school.getAbbreviation(), school.getName(),
        dateFormat.format(new Date()));
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
fileName = fileName + ".xlsx";

response.setHeader("Content-Disposition", "attachment; filename=\""
    + fileName + "\"");

BufferedOutputStream bos =
    new BufferedOutputStream(response.getOutputStream());

XSSFWorkbook workbook = new XSSFWorkbook();
exportManager.writeFieldRecords(bos, schoolId);
FileOutputStream fos = new FileOutputStream(fileName);
workbook.write(fos);
fos.close();
bos.flush();
response.flushBuffer();
}

我以这种方式使用 EXTJS 调用此方法:

  listeners: {
                click: function(){
                    Ext.Ajax.request({
                        disableCaching: false,
                        method: 'GET',
                        params: {
                          conversationId : this.conversationId,
                          schoolId       : Ext.getStore('DataStore').getProxy().extraParams.schoolId,
                          schoolAbbreviation: Ext.getStore('DataStore').getProxy().extraParams.schoolAbbreviation
                        },
                        url: 'export/exportEditableFields',
                        success: function(r, opts) {
                             var resp    = Ext.decode(r.responseText);
                             var b =1;
                                Ext.DomHelper.append(Ext.getBody(), { 
                                  tag:          'iframe', 
                                  frameBorder:  0, 
                                  width:        0, 
                                  height:       0, 
                                  css:          'display:none;visibility:hidden;height:0px;', 
                                  src:          resp.downloadUrl 
                                });                             },
                        failure: function(response, opts) {
                           console.log('server-side failure with status code ' + response.status);
                        }
                     });
                }

问题出在浏览器上我无法下载 java 方法生成的 xlsx。 有什么想法吗?

我应该如何处理下载文件的成功响应? 我正在使用 EXTJS 4.2、Tomcat 7、Java 7

非常感谢!

最佳答案

谢谢大家!使用 window.open(url, '_self'); 解决了问题;

关于java - 如何使用带有 EXTJS 的 Ajax HTTP GET 下载 xlsx?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33965604/

相关文章:

ExtJS:数据网格:加载后重新应用排序/刷新

java - 在 Android 中重复执行后台线程的最佳方法?

javascript - 单击按钮后数据表初始化表(ajax,jquery)

javascript - 如何在浏览器中读取 Connect Js cookie?

javascript - 已验证的 AJAX 文件下载

javascript - 从服务器文件持续更新 HTML 元素

javascript - 有条件地覆盖 Ext JS/Sencha Chart 框架

java - 调用一个类给我带来问题(坏类 - 类文件包含错误的类)

java - 我无法使用 JTree 监听器更改 cardLayout 中的卡

java - Java 8 中根据条件对列表进行排序