gpt4 book ai didi

grails - Grails Controller 和继承/关闭

转载 作者:行者123 更新时间:2023-12-02 14:57:59 25 4
gpt4 key购买 nike

这里有Grails 2.4.4。我所有的 Controller 都是使用标准grails create-controller ...命令生成的:

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

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

...etc.

在每个操作方法的顶部,在每个 Controller 中,我需要调用一个方法 doSomething(String)。此方法需要访问 redirect(...),以便可以根据需要重定向用户。理想情况下,我可以创建一个抽象的基础 Controller 类,并让我的所有 Controller 对其进行扩展:
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 magic”,以确保可以访问 redirect(...)render(...)等内容。如果我可以将所有这些内容放进去,那也是 很棒的一个闭包,然后隐式地执行它(而不必在每个 Controller Action 的开始都调用 doSomething()

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

最佳答案

使用Filter代替:

class ExampleFilters {

def filters = {

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

before = {
}

after = { Map model ->
}

afterView = {
}
}
}
}

关于grails - Grails Controller 和继承/关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35205282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com