我在尝试验证和保存域对象时遇到问题。
首先我正在进行验证,当验证错误时,我将错误放在我的未来作为保存对象,如下所示:
myDomain.errors.reject("An Error")
myDomain.discard()
然后,当我尝试保存此对象时,我可以看到错误列表有一个错误,但' validate()' 返回& #39; true' ,此外,当功能完成时,对象将自动保存。 我必须说所有被调用的函数都在同一个类中,它是一个控制器。
我需要知道如何编写我的保存功能(在控制器类中),它只显示错误而不保存对象,并且在验证良好时,保存对象。
谢谢!
答案 0 :(得分:0)
myDomain.validate()
将覆盖myDomain.errors
以清除reject()
。你可以这样做:
// bind etc.
...
// do grails validation
if (!myDomain.validate()) {
myDomain.discard()
}
// do custom validation
if (custom validation has errors) {
myDomain.errors.reject ()
myDomain.discard()
}
如果您可以将自定义验证移至myDomain上的validator,则无需自定义验证。
您不需要显式调用save()。
答案 1 :(得分:0)
修复是使用:
@Transactional(readOnly = true)
对于位于服务文件中的功能。 它使函数避免在最后保存事务,这首先引起了问题。