0

問題: JSTL は、リソース バンドルの 1 つの言語バージョンを使用すると「スタック」します。1 つのセッションだけでなく、新しいセッションも対象となります。同じページのStrutsbean:messageタグは、同じリソース バンドルを使用し、言語を切り替えます。

質問とは関係ありませんが (私が思うに?)、Struts1 アクションは、URL でパラメーターが渡されたかどうかをチェックして、言語を英語とフランス語の間で切り替えます。

String localeSwitch = request.getParameter("locale");
if (localeSwitch != null) {
    if (localeSwitch.equalsIgnoreCase("en")) {
        Locale locale = new Locale(Locale.ENGLISH.getLanguage(), Locale.CANADA.getCountry());
        request.getSession().setAttribute(Globals.LOCALE_KEY, locale);
        Config.set(request.getSession(), Config.FMT_LOCALE, locale);
    } else if (localeSwitch.equalsIgnoreCase("fr")) {
        Locale locale = new Locale(Locale.FRENCH.getLanguage(), Locale.CANADA.getCountry());
        request.getSession().setAttribute(Globals.LOCALE_KEY, locale);
        Config.set(request.getSession(), Config.FMT_LOCALE, locale);
    }
}

Config.FMT_LOCALEは JSTL 用、Globals.LOCALE_KEYは Struts 用です。

JSPでは(私は本当に混乱しているため)、次のようにしています。

<%
out.println("Config.FMT_LOCALE="+Config.get(request.getSession(), Config.FMT_LOCALE));
%>
<fmt:bundle basename="proj.resources.Resource">
    <fmt:message var="mymessage" key="mymessage" />
</fmt:bundle>
${mymessage}
<%
out.println("Config.FMT_LOCALE="+Config.get(request.getSession(), Config.FMT_LOCALE));
%>

リソース ファイルは および と呼ばれResource.propertiesますResource_fr.properties

次のそれぞれの間に、アプリケーション サーバー (JBoss) が再起動されました。

  • (期待される動作) 言語を指定せずにページにアクセス:Config.FMT_LOCALE=null出力、英語のメッセージが表示されます。
  • (期待される動作) 英語を指定してページにアクセス:Config.FMT_LOCALE=en_CA出力、英語のメッセージが表示されます。
  • (期待される動作) フランス語を指定してページにアクセス:Config.FMT_LOCALE=fr_CA出力、フランス語のメッセージが表示されます。
  • (予期しない動作) 言語を指定せずにページにアクセスし、次にフランス語を指定してページにアクセス: Config.FMT_LOCALE=fr_CA出力、英語のメッセージが表示されます。
  • (予期しない動作) 英語を指定してページにアクセスし、次にフランス語を指定してページにアクセス: Config.FMT_LOCALE=fr_CA出力、英語のメッセージが表示されます。
  • (予期しない動作) フランス語を指定してページにアクセスし、次に英語を指定してページにアクセス: Config.FMT_LOCALE=en_CA出力、英語のメッセージが表示されます。
4

1 に答える 1

0

この問題は、JSTLも実行するStrutsにパッケージ化されたJAR(jstl-1.0.2.jarおよびstandard-1.0.2.jar)が原因であると思われます。

WARファイルの作成時にこれらを除外するようにビルドファイルを変更すると(JBoss jstl.jarが使用されることになります)、問題が修正されました。

于 2012-08-15T13:08:50.550 に答える