2012-03-13 47 views
0

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

我对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行(由于分页)。如何管理分页,但能够导出所有相应的行?

回答

0

如果用户可以修改表格的值,您只需要将表格中的数据发送到服务器。这真的是你的用例吗?如果没有 - 你不需要使用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")任何其他情况表明您不想列出所有结果。希望有所帮助...

+0

是的,但如果我不想导出所有域类实例呢?例如,如果我在GSP表中做了某种过滤,那么只有一些我的域类实例?我错过了什么吗? – johndoe 2012-03-13 10:56:40

+0

这只是一个例子。你可以用任何其他的实例列表替换'Book.list(params)'。要创建要导出的实例列表,可以使用各种groovy/grails方法([criteria](http://grails.org/doc/latest/ref/Domain%20Classes/createCriteria.html),[query] (http://grails.org/doc/latest/ref/Domain%20Classes/executeQuery.html),[finder](http://grails.org/doc/latest/ref/Domain%20Classes/findAllBy.html)等)来选择你的disired实例。你如何过滤你的GSP表的实例? – aiolos 2012-03-13 11:11:48

+0

我在action中使用了类似def的bookList = Book.executeQuery(“select ...”),并将其传递给GSP [bookInstanceList:bookList,bookInstanceTotal:bookList.count()] – johndoe 2012-03-13 11:32:49

相关问题