我实际上刚刚开始使用grails并且只是生成了一些脚手架。 这里似乎有一些非常通用的代码会在每个控制器中重复。
您如何建议将其从控制器中删除? 理想情况下,我想做一个
def personInstance = Person.get(id)
然后为每个控制器执行一个异常处理程序,默认情况下在每个控制器中生成。
def update(Long id, Long version) {
def personInstance = Person.get(id)
if (!personInstance) {
flash.message = message(code: 'default.not.found.message', args: [message(code: 'person.label', default: 'Person'), id])
redirect(action: "list")
return
}
if (version != null) {
if (personInstance.version > version) {
personInstance.errors.rejectValue("version", "default.optimistic.locking.failure",
[message(code: 'person.label', default: 'Person')] as Object[],
"Another user has updated this Person while you were editing")
render(view: "edit", model: [personInstance: personInstance])
return
}
}
答案 0 :(得分:2)
如果要更改控制器的默认脚手架,只需发出“grails install-templates”命令。将在src / templates文件夹中创建许多文件。其中一个是“src / templates / scaffolding / Controller.groovy”
然后只需将“update”函数修改为您需要的格式,然后再为您的域类生成控制器。
但是,您应该考虑是否真的不想使用乐观/悲观锁定,因为这会使您的应用程序在某种程度上不是事务性的。
答案 1 :(得分:1)
看看A Pattern To Simplify Grails Controllers,它为这些东西提出了一个Groovy模式。如果你想出一个很好的解决方案,请告诉我们,我自己即将做类似的事情。