Home of: [工房 "藤車"] > [SourceForge.net における PageMixer]

「Locale」の確定

本節では、 PageServlet を使用する際の Locale 確定のカスタマイズ方法について説明します。

ロケールに応じた応答の描画に興味が無い場合は、 本節を読み飛ばしても構いません。

概要

クラス図

本節におけるクラス図を以下に示します。

クラス図
クラス図 (クリックで拡大表示)

色づけされているのが本節で定義するクラスで、 それ以外は PageMixer において定義済みです。

クラス名

本チュートリアルでは、 クラスは全てクラス名のみで表記されています。 完全な名称は以下の通りです。

PageMixer フレームワークのクラス

記述完全名
ConsumerContext jp.ne.dti.lares.foozy.pagemixer.mixer.ConsumerContext
LocaleFactory jp.ne.dti.lares.foozy.pagemixer.servlet.LocaleFactory
PageServlet jp.ne.dti.lares.foozy.pagemixer.servlet.PageServlet
ParameterKey jp.ne.dti.lares.foozy.pagemixer.servlet.ParameterKey
SessionKey jp.ne.dti.lares.foozy.pagemixer.servlet.SessionKey

チュートリアルの固有クラス

記述完全名
CustomLocaleFactory pagemixer.servlet.CustomLocaleFactory

カスタマイズの目的

Servlet API は、 当該要求における Locale を取得するために HttpServletRequest#getLocale() を提供しています。

それに加えて、 PageMixer 環境での Locale 確定のカスタマイズにより、 要求ごとの Locale を他の方法で確定することができます。 例えば:

LocaleFactory のオーバロード

PageMixer は Locale 確定をカスタマイズするために "LocaleFactory" を提供しています。

このクラスは、 複雑な用途のために他にもオーバライド可能なメソッドを備えていますが、 ほとんど全てのケースにおいて、 create メソッドをオーバライドすることで要求を満たすことができると思われます。 他のメソッドの詳細は API ドキュメントを参照してください。


public Locale create(ConsumerContext context)

create() メソッドのシグネチャ

オーバライド例を以下に示します。


String value =
(String)(context.getValue(KEY_PARAM_LOCALE));

Locale locale =
(Locale)(context.getValue(KEY_SESSION_LOCALE));

if(null != value){
    locale = new Locale(value, "", "");
    context.setValue(KEY_SESSION_LOCALE, locale);
}
else if(null == locale){
    locale = Locale.getDefault();
}

return locale;

ロケール確定のカスタマイズ

この例における KEY_PARAM_LOCALE および KEY_SESSION_LOCALE はそれぞれ ParameterKey および SessionKey のインスタンスです。 そのため、上記例では以下の手順で Locale を確定します。

  1. 要求パラメータの指定がある場合は Locale を生成する
  2. 既に Locale がセッションに格納されている場合はそれを使用する
  3. それ以外の場合は実行環境のデフォルト Locale を使用する

設定

基底クラスのパラメータ

LocaleFactory は特に初期化パラメータを必要としません。

カスタムクラスを使用するためのパラメータ

カスタマイズした LocaleFactory クラスを使用する場合、 配備記述子において、 Servlet の init-param として "servlet.localeFactory" を以下のように指定する必要があります。


<init-param>
  <param-name>
    servlet.localeFactory
  </param-name>
  <param-value>
    pagemixer.servlet.CustomLocaleFactory
  </param-value>
</init-param>

カスタム LocaleFactory の指定

次節「ページ情報の確定」へ