将值从gsp传递给控制器

时间:2012-10-10 03:39:39

标签: grails export

我正在为我的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传递给控制器​​?

请帮助,谢谢。

3 个答案:

答案 0 :(得分:1)

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

<强> reportFilter.gsp

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

<强> fruitsReport.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>

<强> ReportController.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 **/        
}

<强> ReportService.groovy

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

注意

如果您仍然坚持将数据从gsp传递到控制器,那么您仍然可以通过使用ajax调用POST列表来执行此操作。 (但这将是一个肮脏的方法)

答案 1 :(得分:0)

此变量仅适用于页面。你可以用params传递它

 <export:formats formats ="[]", params ="[fruitInstanceList:${fruitInstance}]"/>

答案 2 :(得分:0)

您无法将视图中的列表作为参数传递。因为,params将作为get进入控制器,参数将连接到URL,它将转换为字符串。

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

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