エンティティには、英語とフランス語に翻訳された列挙フィールドがあります。
同じエンティティに、toString として使用している計算フィールドがあるため、ユーザーのロケールに応じて英語またはフランス語に翻訳された列挙値を使用して計算フィールドを構築したいと考えています。
私の質問:エンティティの拡張で記述された計算フィールドのゲッターで、ユーザーのロケールを取得して列挙値を変換するにはどうすればよいですか?
エンティティには、英語とフランス語に翻訳された列挙フィールドがあります。
同じエンティティに、toString として使用している計算フィールドがあるため、ユーザーのロケールに応じて英語またはフランス語に翻訳された列挙値を使用して計算フィールドを構築したいと考えています。
私の質問:エンティティの拡張で記述された計算フィールドのゲッターで、ユーザーのロケールを取得して列挙値を変換するにはどうすればよいですか?
拡張機能に実行コンテキストを認識させる必要があります。実行中のコンテキストの要素を挿入できるように、拡張機能に実装できるインターフェイスがいくつかあります。
org.jspresso.framework.model.component.IComponentFactoryAware
ICompoentFactory
インスタンスを受け取るorg.jspresso.framework.security.ISubjectAware
ログインしたインスタンスを受け取るSubject
org.jspresso.framework.application.backend.session.IApplicationSessionAware
の現在のインスタンスを受け取るIApplicationSession
org.jspresso.framework.model.entity.IEntityLifecycleHandlerAware
のインスタンスを受け取るIEntityLifecycleHandler
ユースケースを満たすには、4 番目のインターフェースを実装する必要があります。拡張機能にはIEntityLifecycleHandler
、次のメソッドを介してのインスタンスが挿入されます。
void setEntityLifecycleHandler(IEntityLifecycleHandler);
このインスタンスをインスタンス パラメーターとして拡張機能の実装に格納し、後で安全にorg.jspresso.framework.application.IController
.
例えば :
public String getI18nLabel() {
String translationKey = "ENUM_NAME." + getComponent().getEnumValue();
IController controller = (IController) lifecycleHandler;
return controller.getTranslation(translationKey, controller.getLocale());
}
列挙の I18N リソース バンドル キーのパターンは、上記のコードでローカル変数${ENUM_NAME}.${ENUM_VALUE}
として計算されることを覚えておいてください。translationKey