grails - templarios - Usando el servicio de griales en la clase de dominio.
santo grial valencia (3)
Eso debería funcionar. Tenga en cuenta que ya que está usando ''def'' no necesita agregarlo a la lista de transitorios. ¿Estás intentando acceder desde un método estático? Es un campo de instancia, por lo que solo puede acceder a él desde instancias.
El caso de uso típico para inyectar un servicio en una clase de dominio es para validación. Un validador personalizado pasa la instancia de clase de dominio que se está validando, por lo que puede acceder al servicio desde eso:
static constraints = {
name validator: { value, obj ->
if (obj.testService.someMethod(value)) {
...
}
}
}
Quiero usar un servicio en mi aplicación Grails. Sin embargo, siempre es nulo. Estoy usando la versión 1.1 de Grails. ¿Como puedó resolver esté problema?
Código de muestra:
class A{
String name;
def testService;
static transients=[''testService'']
}
¿Puedo usar un servicio dentro de una clase de dominio?
La respuesta corta es. Sí, puedes usar el servicio dentro de la clase de dominio.
Aquí hay un código de ejemplo donde la clase de dominio obtiene acceso al servicio de autenticación desde el complemento de acegi. Funciona sin problemas.
class Deal {
def authenticateService
def afterInsert() {
def user = authenticateService.userDomain();
....
}
....
}
Para resumir las respuestas de Burt y Remis: en el validador de dominio personalizado, debe usar obj.testService
lugar de usar testService
directamente. Si quieres usar el servicio en el validador de dominio personalizado:
static constraints = {
name validator: { value, obj ->
if (obj.testService.someMethod(value)) {
...
}
}
}
Pero en otros métodos, incluyendo afterInsert
y otros métodos privados / públicos, usar testService
está bien.
def someMethod() {
def user = testService.serviceMethod();
....
}