Grails导出插件不下载任何文件

时间:2013-11-13 18:16:36

标签: grails export grails-plugin

我想使用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.

3 个答案:

答案 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.formatnull,我为扩展做了系统打印,并且我注意到扩展名与所有扩展名的格式相同,但< 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)
    }