I want to set the JSTL locale which is used by <fmt:formatNumber>
and friends. I know this is possible with <fmt:setLocale>
, but I need to do it dynamically (depending on user data retrieved from my DB) and would prefer Java code - a filter class, to be precise.
I thought setting the session attribute javax.servlet.jsp.jstl.fmt.locale
to my desired Locale
instance would do the trick, but it is ignored: The JSTL tags keep using the browser locale.
I verified there are no page context or request attributes of the same name.
So what am I doing wrong? Or do I really need to do it from a JSP?
Reading the JSTL code, I found references to a LocalizationContext
and think I need to set one. I couldn't quite figure out exactly how it fits into the picture or how to set one, though.
you need the 2nd:
3 ways to set JSTL locale: /as well as default application resource bundle, time zone, and data source/
Set by a JSTL action – this allows specification of scope by the scope attribute.
<fmt:setLocale value="en_US" scope="session"/>
Set Programmatically – allows specification of scope via the 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)
Set by Context Initialization Parameters – specifies value used if setting not found in any of the standard scopes.
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.locale</param-name>
<param-value>en_US</param-value>
</context-param>