当文件包含在 GSP 表单中时,Grails 不会更新数据对象?
Grails doesn't update data object when a file is included in GSP form?
我是一个 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>
控制器:
@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()}
我看到了漂亮的闪亮错误 - 如果我将名称从 'bundle' 更改为 'myfile',一切正常。哎呀
我是一个 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>
控制器:
@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()}
我看到了漂亮的闪亮错误 - 如果我将名称从 'bundle' 更改为 'myfile',一切正常。哎呀