18

<fmt:formatNumber>友人が使用する JSTL ロケールを設定したい。でこれが可能であることはわかって<fmt:setLocale>いますが、(DB から取得したユーザー データに応じて) 動的に実行する必要があり、正確には Java コード (フィルター クラス) を使用したいと考えています。

セッション属性javax.servlet.jsp.jstl.fmt.localeを目的のLocaleインスタンスに設定するとうまくいくと思いましたが、無視されます。JSTL タグはブラウザーのロケールを使用し続けます。

同じ名前のページ コンテキストまたはリクエスト属性がないことを確認しました。

それで、私は何を間違っていますか?それとも、本当に JSP から実行する必要がありますか?

JSTL コードを読んで、a への参照を見つけたので、LocalizationContextそれを設定する必要があると思います。しかし、それがどのように写真に収まるか、どのように設定するかを正確に理解することはできませんでした.

4

5 に答える 5

30

2番目が必要です:

JSTL ロケールを設定する 3 つの方法: /デフォルトのアプリケーション リソース バンドル、タイム ゾーン、およびデータ ソースに加えて/

  1. JSTL アクションによって設定されます。これにより、scope 属性によるスコープの指定が可能になります。

    <fmt:setLocale value="en_US" scope="session"/>
    
  2. プログラムで設定 – Config API を介してスコープを指定できます。

    import javax.servlet.jsp.jstl.core.Config;
    (...)
    Config.set( session, Config.FMT_LOCALE, new java.util.Locale("en", "US") )
    // or Locale.forLanguageTag("en-US") (java 1.7 and later)
    
  3. Set by Context Initialization Parameters – 標準スコープのいずれにも設定が見つからない場合に使用される値を指定します。

    <context-param>
        <param-name>javax.servlet.jsp.jstl.fmt.locale</param-name>
        <param-value>en_US</param-value>
    </context-param>
    

jstl-クイックリファレンス (PDF)

于 2012-03-31T12:01:33.380 に答える
12

でELを使用できます<fmt:setLocale>。ハードコードされた値などである必要はありません。

次に例を示します。

<c:set var="language" value="${not empty param.language ? param.language : not empty language ? language : pageContext.request.locale}" scope="session" />
<fmt:setLocale value="${language}" />

言語が name のリクエスト パラメータとして指定された場合は、言語がlanguage設定されます。それ以外の場合、言語が属性 name によってセッションで既に設定されている場合は、language代わりにそれに固執します。それ以外の場合は、リクエスト ヘッダーでユーザーが指定したロケールを使用します。

フィルタ コードでa を実行するsession.setAttribute("language", language)と、リクエスト パラメータが設定されていない場合に使用されます。

以下も参照してください。

于 2011-05-25T15:19:27.910 に答える
0

'router'DB からのデータに依存している場合、このロジックをorに挿入するより良い方法があるかもしれません'controller'(使用しているフレームワークによって異なります)。パラメータでURLを拡張するだけです?lang='en'

お役に立てれば

于 2011-05-25T15:14:02.577 に答える