【发布时间】:2013-05-24 17:08:33
【问题描述】:
我们有多个使用@Mixin 注解的 Grails 2.0.3 域类
像这样:
@Mixin(PremisesMixin)
class Clinic {
Premises premises
String name
....
效果很好!
在尝试更新到 2.2.2 时,mixin 似乎不起作用。我们使用fixtures插件来引导一些数据,在启动过程中,我们得到了与不存在的mixins注入的getter和setter相关的错误。
我确实发现在较新版本的 grails 中 groovy mixins 存在一些问题,但有一个 Grails 特定的替代品http://jira.grails.org/browse/GRAILS-9901
但改成
@grails.util.Mixin(PremisesMixin)
class Clinic { ...
给出其他错误。
Getter for property 'fax' threw exception; nested exception is java.lang.reflect.InvocationTargetException
那么有没有办法在最新版本的 grails 中使用 Grails 域类上的 mixin,还是我需要重构我的代码以避免它们?
更新: src/groovy 中的前提 mixin 如下所示:
class PremisesMixin implements Serializable {
private static final long serialVersionUID = 1L
static fields = ['addressLine1', 'addressLine2', 'city', 'county', 'state', 'postalCode', 'plus4', 'phone', 'latitude', 'longitude']
String getAddressLine1() { premises?.addressLine1 }
void setAddressLine1(String addressLine1) { premises?.addressLine1 = addressLine1 }
String getAddressLine2() { premises?.addressLine2 }
void setAddressLine2(String addressLine2) { premises?.addressLine2 = addressLine2 }
String getCity() { premises?.city }
void setCity(String city) { premises?.city = city }
...
String getPhone() { premises?.phone }
void setPhone(String phone) { premises?.phone = phone }
String getFax() { premises?.fax }
void setFax(String fax) { premises?.fax = fax }
...
// Workaround for open Groovy bug with Mixins https://issues.apache.org/jira/browse/GROOVY-3612
String toString() {
this as String
}
}
而前提是这样的:
class Premises {
String addressLine1
String addressLine2
String city
String state
...
String county
String phone
String fax
Double latitude
Double longitude
}
【问题讨论】:
-
PremisesMixin长什么样子?我在同一条船上,几个月前升级到 2.2.0,就像你一样,但 Grails @Mixin 为我工作。 -
已编辑以包含一些前提 mixin 内容
-
我在静态
fields中看不到fax。premises在哪里。 :) -
很好地捕捉到传真不在静态字段中。添加了一些有问题的额外内容,以使事情更清楚。
-
修复该传真问题并没有解决问题。它仍然无法混合其他 getter 和 setter
标签: grails groovy grails-domain-class