【发布时间】:2013-09-07 18:39:01
【问题描述】:
我正在尝试在 Grails 中执行以下操作:
class I18nEnum implements MessageSourceResolvable {
public Object[] getArguments() { [] as Object[] }
public String[] getCodes() { [ this.class.canonicalName+'.'+name() ] }
public String getDefaultMessage() { "?-" + name() }
}
然后像这样使用这个类:
class MyDomainClass {
@Mixin(I18nEnum)
public static enum MaritalStatus {
SINGLE, MARRIED
}
MaritalStatus maritalStatus
}
然后 MyDomainClass 与脚手架一起使用以生成 HTML 选择字段,并在 messages.properties 中使选项可翻译,如下所示:
my.package.MyDomainClass.MaritalStatus.SINGLE = Single
my.package.MyDomainClass.MaritalStatus.MARRIED = Married
但我找不到获取目标类的名称(my.package.MyDomainClass.MaritalStatus)的方法,而是获得了mixin 类 (my.package.I18nEnum@1dd658e9)
如何获得 groovy mixin 的目标类?
有没有办法做这样的事情?
public String[] getCodes() { [ this.targetClass.canonicalName+'.'+name() ] }
还是这样?
public String[] getCodes() { [ this.mixinTargetClass.canonicalName+'.'+name() ] }
注意:目前,我使这个枚举国际化功能发挥作用的唯一方法是复制粘贴每个应用程序中定义的枚举类:
public static enum MaritalStatus implements MessageSourceResolvable {
SINGLE, MARRIED
public Object[] getArguments() { [] as Object[] }
public String[] getCodes() { [ this.class.canonicalName+'.'+name() ] }
public String getDefaultMessage() { name() }
}
MaritalStatus maritalStatus
但我想不为每个枚举重复相同的代码,而只是混合实现MessageSourceResolvable所需的方法。 p>
【问题讨论】:
标签: grails groovy enums internationalization mixins