我正在为我的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传递给控制器?
请帮助,谢谢。
答案 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,它将转换为字符串。
所以你想要做的是,你需要在使用导出代码的那个动作中做逻辑。
即,如何获取控制器中的列表并将其发送到视图?同样地,在这里你必须做一些业务逻辑并获取列表,然后将其发送到导出插件。