2

我正在为我的 grails 应用程序使用导出插件。如何将列表实例传递给控制器​​?我的 gsp 中有这个:

    <g:set var="fruitInstanceList" name="fruitInstanceList" value="${fruitInstanceList}"/>
    <export:formats formats="['csv', 'excel', 'ods', 'pdf', 'rtf', 'xml']"/>

在我的控制器中:

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

该代码不起作用,因为fruitInstanceList 没有传递给控制器​​。我怎样才能做到这一点?使用上面的代码将值从 gsp 传递到控制器?

请帮忙,谢谢。

4

3 回答 3

1

您不必将报告数据一直传递回控制器。您从控制器获得了这些数据(此处为“fruitInstanceList”),可能基于某些过滤器选项。您需要做的就是再次向控制器发布过滤器选项,然后控制器将获取相同的数据(即“fruitInstanceList”),然后将其导出为您想要的格式。骨架代码如下所示:

报告过滤器.gsp

<form name="fruitsFilterForm" action="fruitsReport" controller="report">
    <input type="text" name="search" value="${params.search}" />
    <input type="submit" value="Show Report" />
</form>

水果报告.gsp

<form name="reportExportForm" action="exportFruitsReport" controller="report">
    <input type="text" name="search" value="${params.search}" />
    <input type="hidden" name="format" value="${defaultFormat}" />
    <input type="submit" value="Export" />
</form>

报告控制器.groovy

def reportService
def fruitsReport() {
    def fruitInstanceList = reportService.fetchFruitsList(params);
    [fruitInstanceList: fruitInstanceList, params: params, defaultFormat: "excel"]
}

def exportFruitsReport() {
    def fruitInstanceList = reportService.fetchFruitsList(params);

    /** All your code to export the fetched fruitInstanceList **/        
}

报告服务.groovy

def fetchFruitsList(params) {
    return Fruit.findAll(/* your query based on the params */)
}

笔记

如果您仍然坚持将数据从 gsp 传递到控制器,那么您仍然可以通过使用 ajax 调用发布您的列表来做到这一点。(但这将是一种肮脏的方法)

于 2013-08-12T14:11:55.200 回答
0

您不能将列表作为参数从视图传递。由于参数将作为 get 转到控制器,因此参数将连接到 URL,并将转换为字符串。

所以你想要做的是,你需要在你使用导出代码的那个动作中执行逻辑。

即,您如何在控制器中获取列表并将其发送到视图?同样的方式,在这里你必须做一些业务逻辑并获取列表,然后将其发送到导出插件。

于 2012-10-15T04:21:25.903 回答
0

此变量仅对页面可用。您可以使用参数传递它

 <export:formats formats ="[]", params ="[fruitInstanceList:${fruitInstance}]"/>
于 2012-10-11T21:33:14.320 回答