在域类中使用grails服务

时间:2010-03-17 04:25:51

标签: grails

我想在Grails应用程序中使用服务。但是,它始终为null。我使用的是Grails 1.1版。我该如何解决这个问题?

示例代码:

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

我可以在域类中使用服务吗?

3 个答案:

答案 0 :(得分:25)

那应该有用。请注意,由于您使用的是“def”,因此无需将其添加到瞬态列表中。您是否尝试从静态方法访问它?它是一个实例字段,因此您只能从实例访问它。

将服务注入域类的典型用例是验证。自定义验证程序将传递要验证的域类实例,因此您可以从以下位置访问该服务:

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

答案 1 :(得分:11)

简短的回答是。是的,您可以在域类中使用服务。

以下是一个示例代码,其中domain类可以从acegi插件访问authenticate服务。它没有问题。

class Deal {
    def authenticateService

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

答案 2 :(得分:1)

总结Burt和Remis的答案: 在域自定义验证程序中,您必须使用obj.testService而不是直接使用testService。如果您想在域自定义验证器中使用服务:

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

但在其他方法中,包括afterInsert和其他私有/公共方法,请使用testService

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