我想在我的Grails应用程序中使用一个服务。但是,它总是为null。 我正在使用Grails版本1.1。我该如何解决这个问题?
示例代码:
class A{
String name;
def testService;
static transients=['testService']
}
我能在一个领域类中使用一个服务吗?
我想在我的Grails应用程序中使用一个服务。但是,它总是为null。 我正在使用Grails版本1.1。我该如何解决这个问题?
示例代码:
class A{
String name;
def testService;
static transients=['testService']
}
我能在一个领域类中使用一个服务吗?
那应该可以。请注意,由于您使用的是“def”,因此无需将其添加到短暂列表中。您是否尝试从静态方法访问它?它是实例字段,因此只能从实例访问它。
将服务注入域类的典型用例是进行验证。自定义验证器会传递正在验证的域类实例,因此您可以从那里访问该服务:
static constraints = {
name validator: { value, obj ->
if (obj.testService.someMethod(value)) {
...
}
}
}
简短回答是:是的,您可以在领域类中使用服务。
以下是一个示例代码,其中领域类从acegi插件获取对认证服务的访问权限。它可以正常运行而不会出现问题。
class Deal {
def authenticateService
def afterInsert() {
def user = authenticateService.userDomain();
....
}
....
}
obj.testService
而不是直接使用testService
。如果您想在域自定义验证器中使用服务:static constraints = {
name validator: { value, obj ->
if (obj.testService.someMethod(value)) {
...
}
}
}
但在其他方法中,包括afterInsert
和其他私有/公共方法中,使用testService
是可以的。
def someMethod() {
def user = testService.serviceMethod();
....
}
beforeUpdate()
中出现了这个错误。但是当我从它的服务类保存时,它可以正常工作。Caused by: java.lang.NullPointerException: Cannot invoke method sendReservationUpdate() on null object
。 - Jerry U