2010-08-23 76 views
1

我對Grails有點新鮮。當我創建或更新域對象並在對象上觸發save()validate()時,如果該方法失敗,系統似乎不會引發異常。我沒有看到任何方式來檢查究竟是什麼失敗。Grails:調試save()或驗證()

典型片段:

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

請格式化代碼塊你的代碼。它是文本框上方的101/010圖標。 – 2010-08-23 13:39:40

回答

6

mydomain.validate()僅用於驗證對象。您可以使用mydomain.hasErrors()來加載錯誤對象,並打印下列語句出錯的地方。

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,如果保存()失敗,驗證異常將被拋出這需要逮住在控制器。