【问题标题】:Grails - Iterating over a map from service into csv file - GroovyGrails - 将地图从服务迭代到 csv 文件 - Groovy
【发布时间】: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:谢谢。

标签: csv grails groovy


【解决方案1】:

啊,我发现了问题所在。我在服务中有 [resultRows:resultRows]。我删除了该行并将其放在控制器中 def resultRows 行的正下方。

def export(Person personInstance) {
    def resultRows = someService.result(personInstance)
    [resultRows:resultRows]
....
}

谢谢你们!

【讨论】:

  • 您不应该就自己的问题发布答案。如果您找到解决方案,您可以编辑您的问题并将其放入其中。
  • @BearArmatis,恰恰相反。 StackOverflow 明确鼓励在您有正确答案时回答您自己的问题。这是常见问题解答的链接。 stackoverflow.com/help/self-answer
  • 谢谢指教。老实说,我不知道。
  • 让您在此处和另一个问题上投票。您现在有 50 个希望现在可以发表评论
  • @vahid,谢谢。你很善良。
猜你喜欢
  • 2012-07-20
  • 1970-01-01
  • 1970-01-01
  • 2016-08-02
  • 1970-01-01
  • 1970-01-01
  • 2012-01-03
  • 1970-01-01
  • 2011-02-03
相关资源
最近更新 更多