Grails:调试save()或validate()

时间:2010-08-23 02:56:12

标签: grails

我对Grails有点新鲜。当我在对象上创建或更新域对象并触发save()validate()时,如果方法失败,系统似乎不会抛出异常。我没有看到任何方法来检查究竟是什么失败。

一个典型的代码段:

if (domainInstance.validate()) {
  flash.message = "Succesfully updated domain object"
} else {
  flash.message = "Failed to update domain object"
  //throw new RuntimeException("Invalid broker")
  log.error "Failed to update domain object"
}

在我的情况下,验证失败了,我在黑暗中为什么。 任何人都能对此有所了解吗?

如果置于try / catch中,则不会抛出异常。

2 个答案:

答案 0 :(得分:6)

mydomain.validate()用于仅验证对象。您可以使用mydomain.hasErrors()来加载errors对象并打印出以下语句出错的地方。

if(mydomain.hasErrors()){
   mydomain.errors.allErrors.each{println it}
}

通常我喜欢保存和更新任何对象的方式是

if(mydomain.hasErrors() || !mydomain.save(failOnError:true){
  //action to be taken if domain validation fails.
}

通过设置failOnError:true,如果save()失败,将抛出需要在控制器中捕获的验证异常。

答案 1 :(得分:4)

您还可以在grails配置文件中为整个应用程序设置failOnError = true

grails.gorm.failOnError=true

http://www.grails.org/doc/1.3.x/guide/3.%20Configuration.html#3.1.3 GORM