【发布时间】:2016-03-09 21:23:13
【问题描述】:
如何将结果映射迭代到 CSV 文件中? 当我在控制器块中有我的方法时,我可以很好地迭代它们,但是如果我把它放在服务中并调用,它就无法识别键并返回空行。 (无法识别 it.column_1。)
class someController {
def someService
def export(Person personInstance) {
def resultRows = someService.result(personInstance)
response.setHeader("Content-disposition", "attachment; filename=sample.csv")
response.contentType = "application/vnd.ms-excel"
def outs = response.outputStream
outs << "${personInstance}\n"
outs << "Column1,Column2,Column3,Column4\n"
resultRows.each() {
outs << it.column_1 + "," + it.column_2 + "," + it.column_3 + "," + it.column_4
outs << "\n"
}
outs.flush()
outs.close()
}
}
提前谢谢你。
编辑 我已经包含了有效的代码。
当我在 someService.result 之后 println resultRows 到控制台时,我得到了
[[column_1:John,column_2:Doe,column_3:123 Main Street,column_4:(123)456-7890][column_1:John,column_2:Doe,column_3:123 Main Street,column_4:(123)456- 7890]]
通过以下代码,我得到了一个 excel 格式的可下载 CSV 文件。
class someController {
def export(Person personInstance) {
def sql = new Sql(dataSource)
def resultRows = sql.rows('select * from table where person_id = ?', [personInstance.id])
[resultRows:resultRows]
response.setHeader("Content-disposition", "attachment; filename=sample.csv")
response.contentType = "application/vnd.ms-excel"
def outs = response.outputStream
outs << "${personInstance}\n"
outs << "Column1,Column2,Column3,Column4\n"
resultRows.each() {
outs << it.column_1 + "," + it.column_2 + "," + it.column_3 + "," + it.column_4
outs << "\n"
}
outs.flush()
outs.close()
}
}
编辑 - 找到答案
啊,我发现了问题所在。我在服务中有 [resultRows:resultRows]。我删除了该行并将其放在控制器中 def resultRows 行的正下方。
def export(Person personInstance) {
def resultRows = someService.result(personInstance)
[resultRows:resultRows]
....
}
谢谢你们!
【问题讨论】:
-
请显示产生错误 it.column_1 无法识别的代码。
-
有错字吗? 'resultRows.each() { code'...应该是 'resultRows.each { code' 吗?
-
@jayan 他们是一样的,但你是对的,你的方式更加惯用 :-)
-
someService.result返回什么?你试过调试吗? -
@tim_yates:谢谢。