3

我实际上只是从 grails 开始,只是生成了一些脚手架。这里似乎有一些非常通用的代码将在每个控制器中重复。

  1. 测试 get() 是否成功
  2. 乐观锁定检查

您如何建议从控制器中删除它?理想情况下,我只想做一个

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
        }
    }
4

2 回答 2

2

如果要更改控制器的默认脚手架,只需发出“grails install-templates”命令。src/templates 文件夹中会创建很多文件。其中之一是“src/templates/scaffolding/Controller.groovy”

然后只需将“更新”功能修改为您需要的格式,并再次为您的域类生成控制器。

不过,您应该考虑是否真的不想使用乐观/悲观锁定,因为这会使您的应用程序在某种程度上不是事务性的。

于 2013-02-10T09:12:03.990 回答
1

看看A Pattern To Simplify Grails Controllers,它为这些东西提出了一个 Groovy 模式。如果您想出一个不错的解决方案,请告诉我们,我自己也将做类似的事情。

于 2013-02-11T08:48:18.120 回答