如何从Java代码设置JSTL语言环境?

Jen*_*ann 17 java locale jstl setlocale

我想设置由<fmt:formatNumber>朋友使用的JSTL语言环境.我知道这是可能的<fmt:setLocale>,但我需要动态地(取决于从我的数据库中检索的用户数据)并且更喜欢Java代码 - 一个过滤器类,确切地说.

我认为将session属性设置javax.servlet.jsp.jstl.fmt.locale为我想要的Locale实例就可以了,但是它被忽略了:JSTL标签继续使用浏览器区域设置.

我确认没有相同名称的页面上下文或请求属性.

那么我做错了什么?或者我真的需要从JSP中做到这一点吗?

阅读JSTL代码,我发现了对a的引用,LocalizationContext并认为我需要设置一个.然而,我无法确切地弄清楚它如何适合图片或如何设置图片.

小智 28

你需要第二个:

3种设置JSTL语言环境的方法: /以及默认的应用程序资源包,时区和数据源/

  1. 通过JSTL操作设置 - 这允许通过scope属性指定范围.

    <fmt:setLocale value="en_US" scope="session"/>
    
    Run Code Online (Sandbox Code Playgroud)
  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)
    
    Run Code Online (Sandbox Code Playgroud)
  3. 上下文初始化参数设置- 指定在任何标准范围中找不到设置时使用的值.

    <context-param>
        <param-name>javax.servlet.jsp.jstl.fmt.locale</param-name>
        <param-value>en_US</param-value>
    </context-param>
    
    Run Code Online (Sandbox Code Playgroud)

jstl-quick-reference(PDF)


Bal*_*usC 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}" />
Run Code Online (Sandbox Code Playgroud)

如果语言是作为带有名称的请求参数提供的language,那么它将被设置.否则,如果语言先前已按属性名称在会话中设置language,则请坚持使用.否则,请在请求标头中使用用户提供的区域设置.

如果您session.setAttribute("language", language)在过滤器代码中执行了操作,那么将使用它 - 如果未设置任何请求参数.

也可以看看: