我想使用grails导出插件将我的Domain类导出为xls和csv文件。
在我名为 front.gsp 的主要版面中,我做到了:
<!DOCTYPE html>
<html lang="en">
<head>
...
<g:layoutHead />
</head>
<body>
<sec:ifLoggedIn>
<r:require module="export"/>
<export:formats formats="['csv', 'excel', 'ods', 'pdf', 'rtf', 'xml']" action="exportTest" />
...
<g:layoutBody />
<r:layoutResources/>
<script type="text/javascript" src="${resource(dir: 'js', file: 'jquery.min.js')}"></script>
<script type="text/javascript" src="${resource(dir: 'js', file: 'bootstrap.min.js')}"></script>
<script type="text/javascript" src="${resource(dir: 'js', file: 'application.js')}"></script>
</body>
</html>
进入我的 DomainClassController.groovy ,我做到了:
def exportTest() {
if(!params.max) params.max = 10
if(params?.format && params.format != "html"){
response.contentType = grailsApplication.config.grails.mime.types[params.format] response.setHeader("Content-disposition", "attachment; filename=contacts.${params.extension}")
exportService.export(
params.format,
response.outputStream,
ContactDTO.list(params),
[:],
[:])
[contactDTOInstanceList: ContactDTO.list( params )]
}
}
我还在我的控制器的视图文件夹中创建一个名为 exportTest.gsp 的视图,只是空文件,以便临时解决404问题。
我没有任何错误消息但是当我点击任何导出按钮时,我正在重定向到我的页面 exportTest.gsp 并且 没有下载文件< / EM>
如何使用grails导出插件获取下载的文件?我按照用户指南,没有任何错误(已解决)但没有创建文件?
感谢阅读!
施奈特
编辑:我只是看到,点击导出链接时,生成的网址为:
http://localhost:8080/site/controller/action?format=excel&extension=xls
但奇怪的是,在我的控制器中输入“println params”时,输出为:
[extension:xls, action:exportTest, format:null, controller:contactDTO, max:10]
params.format是null但是设置为url?!!!
更改这样的URL(并调整控制器代码):
http://localhost:8080/site/controller/action?formatD=excel&extension=xls
给我以下错误:
Firefox ne peut trouver le fichier à l'adresse http://localhost:8080/site/controller/action?formatd=excel&extension=xls.
答案 0 :(得分:6)
我的猜测是params.format与参数中的Grails内容协商格式混淆。导出标记似乎生成了该格式,除非得到修复,您可以创建指向exportTest
的链接,并传递您想要的格式,例如exportFormat变量名称。在您的控制器上使用exportFormat而不是format。
还要确保ContactDTO.list(params)
返回一些值。另一点是确保您在配置中定义了内容类型,如导出插件documentation中所述
所以你可能需要创建一个像这样的链接:
<a class="csv" href="/testData/loader/exportTest?exportFormat=csv&extension=csv">
CSV
</a>
在您的控制器中:
def exportTest() {
if(!params.max) params.max = 10
if(params?.exportFormat && params.exportFormat != "html"){
response.contentType = grailsApplication.config.grails.mime.types[params.exportFormat]
response.setHeader("Content-disposition", "attachment; filename=contacts.${params.extension}")
exportService.export(
params.exportFormat,
response.outputStream,
ContactDTO.list(),
[:],
[:])
[ContactDTO: ContactDTO.list( params )]
}
}
答案 1 :(得分:0)
我通过这种方式做了一些
params.format=params.extension<br/>
if(params.format=='xls') {
params.format='excel'
}
解释:由于params.format
是null
,我为扩展做了系统打印,并且我注意到扩展名与所有扩展名的格式相同,但< EM> XLS 。因此,如果 xls 我的格式必须是&#39; excel &#39;用于 excel 导出。这就是为什么。在我的cas中它适用于 csv , excel , pdf 和 xml 。未使用 ODD 等进行测试。
答案 2 :(得分:0)
我正在使用Grails 3的2.0.0导出插件版本。根据插件ExportTagLib.groovy的内部实现,参数格式已重命名以避免与grails 3发生冲突。
ExportTagLib.groovy
Map params = [f: format, extension: extension] + parameters
使用params.f暂时可以正常工作。示例代码。
if (params.f && params.f != "html") {
response.contentType = Holders.config.grails.mime.types[params.f]
response.setHeader("Content-disposition", "attachment; filename=${message(code: 'dpInvoice.exportBillFacilitator.filename', default: 'exportBillFacilitator')}.${params.extension}")
exportService.export(params.f, response.outputStream, results, fields, labels, formatters, parameters)
}