0

エンティティには、英語とフランス語に翻訳された列挙フィールドがあります。

同じエンティティに、toString として使用している計算フィールドがあるため、ユーザーのロケールに応じて英語またはフランス語に翻訳された列挙値を使用して計算フィールドを構築したいと考えています。

私の質問:エンティティの拡張で記述された計算フィールドのゲッターで、ユーザーのロケールを取得して列挙値を変換するにはどうすればよいですか?

4

1 に答える 1

1

拡張機能に実行コンテキストを認識させる必要があります。実行中のコンテキストの要素を挿入できるように、拡張機能に実装できるインターフェイスがいくつかあります。

  1. org.jspresso.framework.model.component.IComponentFactoryAwareICompoentFactoryインスタンスを受け取る
  2. org.jspresso.framework.security.ISubjectAwareログインしたインスタンスを受け取るSubject
  3. org.jspresso.framework.application.backend.session.IApplicationSessionAwareの現在のインスタンスを受け取るIApplicationSession
  4. 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

于 2015-04-07T17:26:37.033 に答える