将样板代码移出控制器

时间:2013-02-10 06:07:44

标签: grails groovy

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

  1. 测试get()是否成功
  2. 乐观锁定检查
  3. 您如何建议将其从控制器中删除? 理想情况下,我想做一个

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

2 个答案:

答案 0 :(得分:2)

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

然后只需将“update”函数修改为您需要的格式,然后再为您的域类生成控制器。

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

答案 1 :(得分:1)

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