Можно ли создать контроллер, который расширяет абстрактный контроллер в Grails? - PullRequest
4 голосов
/ 07 мая 2011

Мне интересно, возможно ли что-то подобное:

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 /. ....

Кто-нибудь когда-нибудь делал что-нибудь подобное?

Ответы [ 2 ]

8 голосов
/ 07 мая 2011

Попробуйте поместить AbstractController в src/groovy папку.

Хотя, совместное использование функций через контроллеры может быть не лучшей идеей - лучше перенести его в классы или службы POGO.Этот вопрос частично охватывает эту проблему: Как вы используете общие методы в разных контроллерах Grails?

0 голосов
/ 28 сентября 2017

Для последней версии grails (3.x как время написания) было бы лучше использовать черты вместо расширения абстрактного контроллера или использования Mixin, позднее это не рекомендуется, так как введение черт в groovy v2.3Пример использования черты для добавления универсального поведения к вашему контроллеру: 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...'
    }*/
}

Примечание: черты могут динамически получать доступ ко всем объектам контроллера: params, response ... и т. Д., И вы все равно можете переопределить действие черты.

Надеюсь, эта помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...