【问题标题】:Sending GSP table data to controller向控制器发送 GSP 表数据
【发布时间】:2012-03-13 09:55:13
【问题描述】:

我刚开始学习 Grails,它看起来很棒。我目前正在使用导出插件。我在 GSP 中有一个表格和一个提交按钮。单击该按钮应将表数据(域类的实例)导出到 .csv 文件。谁能帮我这个?我猜我可以在表中隐藏字段来保存域模型实例 id,而不是使用 jQuery 获取所有这些 id 并使用 Ajax 作为 JSON 将其发送到控制器的操作,然后将其传递给 exportService。我应该使用 $.ajax 方法还是其他方法?还是有办法在没有 ajax 的情况下做到这一点?

我是 Grails 和 jQuery/Ajax 的新手,所以一些简单的例子会很棒。谢谢。

编辑:

def results = bookCriteria.list(max: params.max as Integer, offset: params.offset as Integer) {
        and {
                'eq'("category","history")
                 ne("status", "Rented")

            }

    }
if(params?.format && params.format != "html"){
        response.contentType = ConfigurationHolder.config.grails.mime.types[params.format]
        response.setHeader("Content-disposition", "attachment; filename=report.${params.extension}")

      exportService.export(params.format, response.outputStream, results, [:], [:])

    }

我在控制器中有类似的东西。但它只返回前 50 行(因为分页)。如何管理分页但能够导出所有对应的行?

【问题讨论】:

    标签: jquery ajax json grails export


    【解决方案1】:

    如果用户可以修改表的值,您只需将数据从表发送到服务器。这真的是你的用例吗?如果没有 - 你不需要使用 AJAX。

    查看description of the plugin。在那里你可以找到一些基本的例子。

    一般来说,您对您的操作执行一个简单的请求,获取您要导出的数据,调用exportService 并按照插件页面上的说明修改response

    插件页面的基本示例:

    def list = {
       if(!params.max) params.max = 10
    
       if(params?.format && params.format != "html"){
          response.contentType = ConfigurationHolder.config.grails.mime.types[params.format]    
          response.setHeader("Content-disposition", "attachment; filename=books.${params.extension}")
    
          exportService.export(params.format, response.outputStream,Book.list(params), [:], [:]) 
       }
       [ bookInstanceList: Book.list( params ) ] 
    }
    

    编辑: 以下是一些代码,您可以在导出的情况下获取所有书籍:

    def results = bookCriteria.list {
       and {
          'eq'("category","history")
          ne("status", "Rented")
       }
    
       if(!params?.format || params.format == "html") {
          maxResults(params.max.toInteger())
          firstResult(params.offset.toInteger())
       }
    }
    

    您可以将if(!params?.format || params.format == "html") 替换为任何其他表明您不想列出所有结果的条件。希望对您有所帮助...

    【讨论】:

    • 是的,但是如果我不想导出所有域类实例怎么办?例如,如果我做了某种过滤,所以在 GSP 表中只有我的一些域类实例怎么办?我错过了什么吗?
    • 这只是一个例子。您可以将Book.list(params) 替换为任何其他实例列表。要创建要导出的实例列表,您可以使用各种 groovy/grails 方法(criteriaqueryfinder 等)来选择您想要的实例。您如何过滤 GSP 表的实例?
    • 我在行动中使用了 def bookList = Book.executeQuery("select ...") 之类的东西,然后像这样将它传递给 GSP [bookInstanceList:bookList, bookInstanceTotal:bookList.count()]
    • 那么您也可以将此查询的结果用作exportService.export() 的参数...如果您仍然需要帮助 - 请提供一些代码。
    • 谢谢!我会修改它,如果我不能让它工作,我会发布一些代码。
    猜你喜欢
    • 2016-10-04
    • 2023-03-20
    • 1970-01-01
    • 2022-01-16
    • 2013-05-28
    • 1970-01-01
    • 2018-12-22
    • 2014-04-26
    • 1970-01-01
    相关资源
    最近更新 更多