我想知道这样的事情是否可能:
abstract class AbstractController {
def list = {
//default list action
}
}
class MyController extends AbstractController {
def show = {
//show action
}
}
在网络上看不到AbstractController
,即/ app / abstract / list无法访问,MyController
的行为list
和show
可以访问网址为/ app / my /....
有人做过这样的事吗?
答案 0 :(得分:8)
尝试将AbstractController
放入src/groovy
文件夹。
但是,通过控制器共享功能可能不是最好的主意 - 最好将其移至POGO类或服务。此问题部分涵盖了此问题:How do you share common methods in different grails controllers?
答案 1 :(得分:0)
对于最近版本的grails(3.x作为编写时),最好是traits而不是扩展抽象Controller或使用Mixin,后者因为在groovy v2.3中引入traits而被弃用,这里是一个使用特征向控制器添加通用行为的示例: 1-在src / groovy中创建你的特征,例如
import grails.web.Action
trait GenericController {
@Action
def test(){
render "${params}"
}
}
2-在实现任何界面时实现你的特性:
class PersonController implements GenericController {
/*def test(){
render 'override the default action...'
}*/
}
注意:traits可以动态访问所有控制器对象:params,response ...等等,你仍然可以覆盖trait的动作。
希望得到这个帮助。