gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 15:22:50 24 4
gpt4 key购买 nike

我是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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com