forms - 当文件包含在GSP表单中时,Grails不会更新数据对象吗?

标签 forms grails gorm gsp

我是Grails的新手,但我认为我做得还不错,直到我开始搞乱文件上传。我正在尝试将文件上传到S3并将文件位置存储在我的数据对象中。

我的问题是可以正常上传文件,也可以更新数据对象,但是出于某种疯狂的原因,我不能同时做这两项!

这是简化的测试代码:

GSP表格:

<form method="post" url="[resource:fileBundleInstance, action:'test']" enctype="multipart/form-data">
     <input type="file" name="bundle">
     <g:actionSubmit class="save" action="test" value="Test" />
</form>

Controller :
@Transactional
def test(FileBundle fileBundleInstance) {

    def file = request.getFile('bundle')
    println file ? "found " + file.originalFilename : "no file"

    fileBundleInstance.state = "test"   // only works if no file input in form
    redirect (action:'edit', id: fileBundleInstance.id)
}

因此,此代码可以很好地获取文件,但不会更新FileBundleInstance的状态。但是,如果我注释掉文件上传表单元素:
        <form method="post" url="[resource:fileBundleInstance, action:'test']" enctype="multipart/form-data">
                <!--input type="file" name="bundle"-->
                <g:actionSubmit class="save" action="test" value="Test" />
        </form>

...状态突然变好了(但是我当然没有文件)!

我怀疑我从根本上误解了GSP表格如何在grails中工作-有人可以让我正确吗?

最佳答案

糟糕,这是我的错误:-/。

事实证明,我在文件中使用的名称“bundle”也是数据对象中字段的名称。 Grails抛出数据异常,并且我没有很好的错误处理能力(新手,请记住:-))。

当我添加行时:

 fileBundleInstance.save();
        fileBundleInstance.errors.allErrors.each {error ->
            println error.toString()}

我看到了很好的 Shiny 错误-如果将名称从“bundle”更改为“myfile”,则一切正常。哎呀。

关于forms - 当文件包含在GSP表单中时,Grails不会更新数据对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32513431/

相关文章:

html - 在 <option> 标签内使用 href 链接

google-app-engine - Google App Engine 上的 Grails - 生产问题 : Response 500 Error

caching - 如何在Grails中启用缓存的情况下将不同服务器同步到GORM层

HTML:通过单个 radio 输入传递多个变量?

javascript - 通过HTML表单查询融合表

database - 如何使用 Liquibase 删除 Grails 中的索引

grails - 不同架构中的表之间的关系映射

hibernate - 如果用withNewSession包装,grails创建条件非唯一对象错误

hibernate - 域类的Grails单元测试(Gorm)

javascript - Joomla 中的简单确认弹出窗口