我想在Grails应用程序中使用服务。但是,它始终为null。我使用的是Grails 1.1版。我该如何解决这个问题?
示例代码:
class A{
String name;
def testService;
static transients=['testService']
}
我可以在域类中使用服务吗?
答案 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();
....
}