Grails控制器和继承/关闭

时间:2016-02-04 15:41:20

标签: grails groovy

Grails 2.4.4。我的所有控制器都是使用标准grails create-controller ...命令生成的:

class FizzController {
    def index() {
        // ...
    }
}

class BuzzController {
    def index() {
        // ...
    }
}

...etc.

在每个操作方法的顶部,在每个控制器中,我需要调用方法doSomething(String)。此方法需要具有redirect(...)的访问权限,以便在需要时可以重定向用户。理想情况下,我可以创建一个抽象的基本控制器类,让我的所有控制器扩展它:

abstract class BaseController {
    void doSomething(String cmd) {
        if(cmd == 'Yee haw!') {
            redirect(controller: 'foo', action: 'baz')
            return false
        }
    }
}

class FizzController extends BaseController {
    def index() {
        String cmd = getCmdSomehow()
        doSomething(cmd)

        // ...etc.
    }
}

class BuzzController extends BaseController {
    def index() {
        String cmd = getCmdSomehow()
        doSomething(cmd)

        // ...etc.
    }
}

但是我不确定Grails是否允许这样做,因为它正在做着#Groovy魔术"在引擎盖下确保可以访问诸如redirect(...)render(...)之类的内容。如果我可以将所有这些放在一个闭包中并且只是拥有它,那么它也将是精彩它是隐式执行的(无需在每个控制器操作的开头调用doSomething()

这里我最好的选择/解决方案是什么?请使用具体的代码示例!

1 个答案:

答案 0 :(得分:4)

改为使用Filter

class ExampleFilters {

   def filters = {

      logFilter(controller: '*', action: '*') {

         before = {
         }

         after = { Map model ->
         }

         afterView = {
         }
      }
   }
}