在backing bean中生成的二进制文件下载在客户端中显示为纯文本

时间:2015-11-29 21:35:08

标签: jsf download plaintext

我有服务器端webapp,我正在尝试使用Apache POI生成一个excel文件,该文件由backing bean提供下载。我能够在服务器磁盘上写入文件,但不能将其写入HTTP响应。

这是我的代码

@IBAction func findContact(sender: AnyObject) {
    let contactDB = FMDatabase(path: databasePath as String)
    if contactDB.open() {
        do {
            defer { contactDB.close() }

            let querySQL = "SELECT address, phone FROM CONTACTS WHERE name = ?"

            let results = try contactDB.executeQuery(querySQL, values: [name.text!])
            if results.next() {
                address.text = results.stringForColumn("address")
                phone.text = results.stringForColumn("phone")
                status.text = "Record Found"
            } else {
                status.text = "Record not found"
                address.text = ""
                phone.text = ""
            }
        } catch let error as NSError {
            print("Error: \(error.localizedDescription)")
        }
    }
}

结果如下:

response

在我尝试过的所有浏览器中都会出现这种情况:Chrome,FF和IE。我希望你能指出我在这里缺少的东西。

2 个答案:

答案 0 :(得分:0)

最后在BalusC中找到了解决方案给出的链接。我在createExcel()标记内的JSF中调用了<a4j:commandButton>方法,该方法通过ajax调用方法。将其更改为<h:commandButton>,现在它正在运行。

答案 1 :(得分:-1)

浏览servlet时,浏览器不会打开一个邀请您下载文件的对话框?我想原因是你错过了在引号之间包含文件名:

response.addHeader("Content-Disposition", "attachment; filename=\"testxls.xls\"");