grails - 如何获得常规混合的目标类?

标签 grails groovy enums internationalization mixins

我正在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

但是我想不要为每个枚举重复相同的代码,而只是 mixin 所需的实现MessageSourceResolvable的方法。

最佳答案

Mixins不适用于枚举。可能对您有用:

class Mix {
    def enumClazz
    Mix(def clz) { enumClazz = clz }
    def getCode() { println "---> ${enumClazz.name()}"}
}


enum MaritalStatus {
    SINGLE, MARRIED    

    @Delegate Mix mixClz = new Mix(this)
}

MaritalStatus.MARRIED.code

关于grails - 如何获得常规混合的目标类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18676599/

相关文章:

java - 如何遍历通用枚举的值?

xml - Grails/Groovy - 将对象呈现/直接转换为 XML 以保存到文件

grails - 异步调用Controller-适用于州和县

grails - 如何防止持久化对象的意外更新?

java - Snakeyaml 似乎不必要地将简单值包装在列表中

jquery - 使用 Groovy 脚本检查多个 HTML 元素中的相同属性

c++ - 扩展枚举?

hibernate - 如何将此SQL转换为Grails Gorm条件查询

json - 使用Groovy JSON构建器

Java 枚举音符