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语言环境的方法: /以及默认的应用程序资源包,时区和数据源/
通过JSTL操作设置 - 这允许通过scope属性指定范围.
<fmt:setLocale value="en_US" scope="session"/>
Run Code Online (Sandbox Code Playgroud)以编程方式设置 - 允许通过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)由上下文初始化参数设置- 指定在任何标准范围中找不到设置时使用的值.
<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)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)在过滤器代码中执行了操作,那么将使用它 - 如果未设置任何请求参数.
| 归档时间: |
|
| 查看次数: |
25742 次 |
| 最近记录: |