1
我正在使用grails 2.4.4和腳手架生成的默認更新方法。假設它是:grails-scafold更新防止保存
@Transactional
def update(Club clubInstance) {
if (clubInstance == null) {
notFound()
return
}
if (clubInstance.hasErrors()) {
respond clubInstance.errors, view:'create'
return
}
clubInstance.save flush:true
request.withFormat {
form {
flash.message = message(code: 'default.created.message', args: [message(code: 'clubInstance.label', default: 'Club'), clubInstance.id])
redirect clubInstance
}
'*' { respond clubInstance, [status: CREATED] }
}
}
我想在某些情況下防止儲蓄。但我發現我可以用全部替換方法:
@Transactional
def save(Club clubInstance) {
redirect action:"index"
}
它仍然保存數據。只有當我從參數中刪除Club clubInstance
時,它纔會停止將數據保存到db。誰能告訴我爲什麼會發生,我如何控制儲蓄?
這是因爲OSIV(視圖中的打開會話)將實例刷新到數據庫。在重定向之前,在方法中使用'clubInstance.discard()'丟棄它。 –
調用'discard'不是正確的解決方案。如果他希望'save'動作要做的就是重定向到'index',那麼只需從'save'方法中刪除'Club clubInstance'參數,並保留'redirect',如他的示例所示。如果您要做的只是放棄更改,沒有理由檢索對象並進行數據綁定。 –
如果場景涉及有條件地發出重定向(這在示例代碼中未顯示),那麼丟棄可能是有意義的。 –