我对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中,则不会抛出异常。
答案 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