Grails:虽然它有错误,但仍然保存了对象

时间:2014-07-20 16:42:01

标签: validation grails

我在尝试验证和保存域对象时遇到问题。

首先我正在进行验证,当验证错误时,我将错误放在我的未来作为保存对象,如下所示:

myDomain.errors.reject("An Error")
myDomain.discard()

然后,当我尝试保存此对象时,我可以看到错误列表有一个错误,但' validate()' 返回& #39; true' ,此外,当功能完成时,对象将自动保存。 我必须说所有被调用的函数都在同一个类中,它是一个控制器。

我需要知道如何编写我的保存功能(在控制器类中),它只显示错误而不保存对象,并且在验证良好时,保存对象。

谢谢!

2 个答案:

答案 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)

对于位于服务文件中的功能。 它使函数避免在最后保存事务,这首先引起了问题。