是否可以创建一个扩展Grails中抽象控制器的控制器?

时间:2011-05-07 07:24:43

标签: grails

我想知道这样的事情是否可能:

abstract class AbstractController {
  def list = { 
   //default list action 
  }
}

class MyController extends AbstractController {
  def show = { 
   //show action 
  }
}

在网络上看不到AbstractController,即/ app / abstract / list无法访问,MyController的行为listshow可以访问网址为/ app / my /....

有人做过这样的事吗?

2 个答案:

答案 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的动作。

希望得到这个帮助。