0
我需要驗證3個域之間的保存操作,這裏是關係:關於多領域關聯的Grails驗證問題?
用戶 - 工作進程:一對多,JobProcess - 熱圖:一對多。
User { static hasMany = [ jobs : JobProcess ] ... }
JobProcess { static hasMany = [ heatmaps : Heatmap ] ... User script ... }
Heatmap { static belongsTo = JobProcess ... JobProcess job ... }
我用異常來控制驗證流程,這是我的驗證類:
class ValidationException extends RuntimeException {
Object invalidObject
ValidationException(String message, Object invalidObject) {
super(message)
this.invalidObject = invalidObject
}
}
我還搭建服務類抽象的熱圖操作(並結合PARAMS數據對象):
def addJob(params) {
def user = User.findById(params.user_id)
if (user) {
def heatmap = new Heatmap(params)
def process = new JobProcess(params)
process.addToHeatmaps(heatmap)
user.addToJobs(process)
if (user.save()) {
return heatmap
} else {
throw new ValidationException("Invalid form", heatmap)
}
}
}
而且我的控制器:
try {
def heatmap= HeatmapService.addJob(params)
flash.message = "Running new process : $heatmap.job}"
redirect(uri:'/')
} catch (ValidationException che) {
flash.message = "Validation Failed ${che.message}"
render(view:'create', model:[heatmap:che.invalidObject])
}
我的第一個問題:我沒有錯誤驗證通過使用:user.save() - 爲什麼沒有驗證執行?
我可以通過if(heatmap.validate()& & user.save())來解決這個問題,購買更新if(user.save())。
有沒有更好的方法來進行?
我的第二個問題:我的重定向不會觸發invalid-post異常。
我被重定向到了我的創建視圖,但是我的所有字段都是空白的(我丟失了所有字段信息)並且沒有驗證錯誤。不過,我正在使用模型:[heatmap:che.invalidObject]。
除了例外,我傳遞了invalidObject,所以我的創建視圖應該顯示確切的驗證錯誤?怎麼了 ?
感謝
1.您也可以引用違反的驗證器嗎? 2.你也可以嘗試在視圖中渲染一個$ {heatmap},看看有什麼?看起來更像是一個錯字。 – 2010-10-22 16:52:42