私は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を実装する必要なメソッドをミックスインしたいと思います。