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()
。
这里我最好的选择/解决方案是什么?请使用具体的代码示例!
答案 0 :(得分:4)
改为使用Filter:
class ExampleFilters {
def filters = {
logFilter(controller: '*', action: '*') {
before = {
}
after = { Map model ->
}
afterView = {
}
}
}
}