【发布时间】:2016-04-10 20:32:40
【问题描述】:
在 Grails 2.4.4 中,我们将类用作域对象的包装器。
它们看起来像这样:
class Foo {
@Delegate
OurDomainClass ourDomainClass
...
}
这行得通,但是当尝试在 Grails 3.0.11 下编译时,我们得到了这个:
> Foo.groovy: 14: Can't have an abstract method in a non-abstract class.
> The class 'Foo' must be declared abstract or the method
> 'org.springframework.validation.Errors
> org_grails_datastore_gorm_GormValidateable__errors$get()' must be
> implemented. @ line 14, column 1. class Foo { ^
删除@Delegate 注释将使编译通过,但对底层类的方法的调用显然不起作用。
有没有办法解决这个问题或实现相同的行为并让它在 Grails 3 下通过编译?
【问题讨论】:
-
您是否尝试将
@Validatable添加到您的包装器中? -
在 grails 3.x 命令实现接口 Validatable 而不是 @Validatable...
-
请原谅我的无知,但是用类包装域背后的想法是什么?是否将 DAO 层与视图层解耦,这样视图对数据库结构的了解为零?如果是这样,您的服务层是否总是返回 Wrapper 对象?你的插入和更新呢?您的 Service 层是否始终接收 Wrapper 对象?
-
@Viriato - 这样域类本身就不会被一堆方法弄得杂乱无章 - 它本质上被用作装饰器。
标签: grails groovy grails-orm grails-3.0