Использование сервиса grails в доменном классе - PullRequest
16 голосов
/ 17 марта 2010

Я хочу использовать сервис в своем приложении Grails. Тем не менее, это всегда ноль. Я использую Grails версии 1.1. Как я могу решить эту проблему?

Пример кода:

 class A{
      String name;
      def testService;
      static transients=['testService']
 }

Могу ли я использовать службу внутри класса домена?

Ответы [ 3 ]

25 голосов
/ 17 марта 2010

Это должно работать. Обратите внимание, что, поскольку вы используете 'def', вам не нужно добавлять его в список переходных процессов. Вы пытаетесь получить к нему доступ статическим методом? Это поле экземпляра, поэтому вы можете получить к нему доступ только из экземпляров.

Типичный вариант использования для внедрения услуги в класс домена - для проверки. Пользовательский валидатор получает проверенный экземпляр класса домена, поэтому вы можете получить доступ к сервису из этого:

static constraints = {
   name validator: { value, obj ->
      if (obj.testService.someMethod(value)) {
         ...
      }
   }
}
11 голосов
/ 19 марта 2010

Краткий ответ. Да, вы можете использовать сервис внутри класса домена.

Вот пример кода, в котором класс домена получает доступ к сервису аутентификации из плагина acegi. Работает без проблем.

class Deal {
    def authenticateService

    def afterInsert() {
        def user = authenticateService.userDomain();
        ....
    }
....
}
1 голос
/ 11 января 2016

Чтобы суммировать ответы Берта и Ремиса: В настраиваемом валидаторе домена вы должны использовать obj.testService вместо непосредственного использования testService. Если вы хотите использовать службу в домене для валидатора:

static constraints = {
   name validator: { value, obj ->
      if (obj.testService.someMethod(value)) {
         ...
      }
   }
}

Но в других методах, включая afterInsert и другие частные / публичные методы, использование testService нормально.

 def someMethod() {
    def user = testService.serviceMethod();
    ....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...