2012-08-14 39 views
0

問題:當我認爲它應該在它們之間切換時,JSTL會使用資源包的一種語言版本「卡住」;不僅僅是一次會議,還有新的會議。 Struts bean:message標籤在同一頁上使用相同的資源包並按預期切換語言。JSTL使用一種語言版本的資源包「卡住」

這與問題無關(我認爲?),但Struts1 Action會檢查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爲支撐件。

在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.propertiesResource_fr.properties

以下每之間,應用服務器(JBoss的)重新啓動:

  • (預期行爲)訪問網頁,而無需指定語言:顯示Config.FMT_LOCALE=null輸出, 英文消息。
  • (預期行爲)指定英語的訪問頁面:Config.FMT_LOCALE=en_CA輸出,英語 消息顯示。
  • (預期行爲)指定法語的訪問頁面:Config.FMT_LOCALE=fr_CA輸出,法語 消息顯示。不指定語言
  • (Unxpected行爲)訪問頁面,則指定法國訪問頁: Config.FMT_LOCALE=fr_CA輸出,顯示英文消息。
  • (Unxpected行爲)指定英文訪問頁面,則指定法國訪問頁: Config.FMT_LOCALE=fr_CA輸出,顯示英文消息。
  • (不確定行爲)訪問頁面指定法語,然後訪問頁面指定英語: Config.FMT_LOCALE=en_CA輸出,顯示英文消息。

回答

0

這個問題似乎是由使用Struts打包的JAR引起的,它也執行JSTL:jstl-1.0.2.jar和standard-1.0.2.jar。

更改我的構建文件以在創建WAR文件時排除這些文件(導致使用了JBoss jstl.jar)可以糾正問題。