Использование службы grails в классе домена

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

Пример кода:

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

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

Ответы

Ответ 1

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

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

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

Ответ 2

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

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

class Deal {
    def authenticateService

    def afterInsert() {
        def user = authenticateService.userDomain();
        ....
    }
....
}

Ответ 3

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

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

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

 def someMethod() {
    def user = testService.serviceMethod();
    ....
}