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

标签 grails export grails-plugin

我想使用 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 )]
        }
    }

我还创建了一个名为 的 View exportTest.gsp 进入我的 Controller 的 View 文件夹,只是空文件来临时解决 404 问题。

我没有任何错误消息,但是当我单击任何导出按钮时,我正在重定向到我的页面 exportTest.gsp 没有文件下载

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

谢谢阅读 !

斯奈特

编辑:我只是看到,当点击导出链接时,生成的 url 是:
http://localhost:8080/site/controller/action?format=excel&extension=xls

但奇怪的是,在我的 Controller 中输入“println params”时,输出是:
[extension:xls, action:exportTest, format:null, controller:contactDTO, max:10]

params.format 为空但设置为 url ?!!!

像这样更改网址(并调整 Controller 代码):
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.

最佳答案

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

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

所以你可能需要创建一个这样的链接:

<a class="csv" href="/testData/loader/exportTest?exportFormat=csv&extension=csv"> 
  CSV 
</a>

在您的 Controller 中:
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 )]
        }
    }

关于Grails 导出插件不下载任何文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19961339/

相关文章:

function - Erlang - 未定义的函数

grails - 在文本中,如果出现 "&"字,那么它不允许我在 grails 中下载

grails - Grails插件-脚手架中 Controller 的动态方法不起作用

grails - 将Spring Security依赖项添加到Grails插件

grails - Grails 2.2.3-如何创建一个新的HTTP session ?

git - Intellij Grails和Git

grails - 在Grails 3.1.1中定义一个枚举

grails - Grails集成测试-域对象相等

php - 使用 PHP 从远程 MySQL 创建 CSV 文件

c++ - 如何在 CMAKE 中导出带有组件的库?