4

我想使用 grails 导出插件将我的域类导出到 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并且没有下载文件

如何使用 grails 导出插件获取下载的文件?我遵循用户指南,没有任何错误(已解决)但没有创建文件?

谢谢阅读 !

斯奈特

编辑:我只是看到,当点击导出链接时,生成的 url 是:

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 ?!!!

像这样更改网址(并调整控制器代码):

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.
4

3 回答 3

6

我的猜测是 params.format 与参数中的 Grails 内容协商格式混淆了。导出标签似乎会生成该格式,除非该格式得到修复,否则您可以创建指向您的链接exportTest并在可以说 exportFormat 变量名称下传递您想要的格式。在您的控制器上使用 exportFormat 而不是格式。

还要确保ContactDTO.list(params)返回一些值。另一点是确保您在配置中定义了内容类型,如导出插件 文档中所述

因此,您可能需要创建这样的链接:

<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 )]
        }
    }
于 2013-11-14T06:09:20.060 回答
0

我通过这种方式做了一些

params.format=params.extension<br/>
        if(params.format=='xls') {
            params.format='excel'
        }

说明:按params.format原样,我为扩展做了一个系统打印,我注意到扩展与除xlsnull之外的所有扩展的格式相同。因此,如果xls I 格式必须为 ' excel ' 才能导出excel 。这就是为什么。在我的案例中,它适用于csvexcelpdfxml。未使用ODD等进行测试。

于 2015-06-24T13:37:38.723 回答
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)
    }
于 2018-06-29T08:38:15.490 回答