Использование службы 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();
....
}