public class SessionLocaleResolver extends AbstractLocaleContextResolver
LocaleResolver
implementation that
uses a locale attribute in the user's session in case of a custom setting,
with a fallback to the specified default locale or the request's
accept-header locale.
This is most appropriate if the application needs user sessions anyway,
i.e. when the HttpSession
does not have to be created just for storing
the user's locale. The session may optionally contain an associated time zone
attribute as well; alternatively, you may specify a default time zone.
Custom controllers can override the user's locale and time zone by calling
#setLocale(Context)
on the resolver, e.g. responding to a locale change
request. As a more convenient alternative, consider using
RequestContext.changeLocale(java.util.Locale)
.
In contrast to CookieLocaleResolver
, this strategy stores locally
chosen locale settings in the Servlet container's HttpSession
. As a
consequence, those settings are just temporary for each session and therefore
lost when each session terminates.
Note that there is no direct relationship with external session management
mechanisms such as the "Spring Session" project. This LocaleResolver
will simply evaluate and modify corresponding HttpSession
attributes
against the current HttpServletRequest
.
AbstractLocaleResolver.setDefaultLocale(java.util.Locale)
,
AbstractLocaleContextResolver.setDefaultTimeZone(java.util.TimeZone)
Modifier and Type | Field and Description |
---|---|
static java.lang.String |
LOCALE_SESSION_ATTRIBUTE_NAME
Name of the session attribute that holds the Locale.
|
static java.lang.String |
TIME_ZONE_SESSION_ATTRIBUTE_NAME
Name of the session attribute that holds the TimeZone.
|
Constructor and Description |
---|
SessionLocaleResolver() |
Modifier and Type | Method and Description |
---|---|
protected java.util.Locale |
determineDefaultLocale(HttpServletRequest request)
Determine the default locale for the given request,
Called if no Locale session attribute has been found.
|
protected java.util.TimeZone |
determineDefaultTimeZone(HttpServletRequest request)
Determine the default time zone for the given request,
Called if no TimeZone session attribute has been found.
|
java.util.Locale |
resolveLocale(HttpServletRequest request)
Resolve the current locale via the given request.
|
LocaleContext |
resolveLocaleContext(HttpServletRequest request)
Resolve the current locale context via the given request.
|
void |
setLocaleAttributeName(java.lang.String localeAttributeName)
Specify the name of the corresponding attribute in the
HttpSession ,
holding the current Locale value. |
void |
setLocaleContext(HttpServletRequest request,
HttpServletResponse response,
LocaleContext localeContext)
Set the current locale context to the given one,
potentially including a locale with associated time zone information.
|
void |
setTimeZoneAttributeName(java.lang.String timeZoneAttributeName)
Specify the name of the corresponding attribute in the
HttpSession ,
holding the current TimeZone value. |
getDefaultTimeZone, setDefaultTimeZone, setLocale
getDefaultLocale, setDefaultLocale
public static final java.lang.String LOCALE_SESSION_ATTRIBUTE_NAME
Use RequestContext(Utils).getLocale()
to retrieve the current locale in controllers or views.
public static final java.lang.String TIME_ZONE_SESSION_ATTRIBUTE_NAME
Use RequestContext(Utils).getTimeZone()
to retrieve the current time zone in controllers or views.
public void setLocaleAttributeName(java.lang.String localeAttributeName)
HttpSession
,
holding the current Locale
value.
The default is an internal LOCALE_SESSION_ATTRIBUTE_NAME
.
public void setTimeZoneAttributeName(java.lang.String timeZoneAttributeName)
HttpSession
,
holding the current TimeZone
value.
The default is an internal TIME_ZONE_SESSION_ATTRIBUTE_NAME
.
public java.util.Locale resolveLocale(HttpServletRequest request)
LocaleResolver
resolveLocale
in interface LocaleResolver
resolveLocale
in class AbstractLocaleContextResolver
request
- the request to resolve the locale fornull
)public LocaleContext resolveLocaleContext(HttpServletRequest request)
LocaleContextResolver
This is primarily intended for framework-level processing; consider using
RequestContextUtils
or
RequestContext
for
application-level access to the current locale and/or time zone.
The returned context may be a
TimeZoneAwareLocaleContext
,
containing a locale with associated time zone information.
Simply apply an instanceof
check and downcast accordingly.
Custom resolver implementations may also return extra settings in the returned context, which again can be accessed through downcasting.
request
- the request to resolve the locale context fornull
LocaleResolver.resolveLocale(HttpServletRequest)
,
RequestContextUtils.getLocale(javax.servlet.http.HttpServletRequest)
,
RequestContextUtils.getTimeZone(javax.servlet.http.HttpServletRequest)
public void setLocaleContext(HttpServletRequest request, HttpServletResponse response, LocaleContext localeContext)
LocaleContextResolver
request
- the request to be used for locale modificationresponse
- the response to be used for locale modificationlocaleContext
- the new locale context, or null
to clear the localeLocaleResolver.setLocale(HttpServletRequest, HttpServletResponse, Locale)
,
SimpleLocaleContext
,
SimpleTimeZoneAwareLocaleContext
protected java.util.Locale determineDefaultLocale(HttpServletRequest request)
The default implementation returns the specified default locale, if any, else falls back to the request's accept-header locale.
request
- the request to resolve the locale fornull
)AbstractLocaleResolver.setDefaultLocale(java.util.Locale)
,
ServletRequest.getLocale()
protected java.util.TimeZone determineDefaultTimeZone(HttpServletRequest request)
The default implementation returns the specified default time zone,
if any, or null
otherwise.
request
- the request to resolve the time zone fornull
if none defined)AbstractLocaleContextResolver.setDefaultTimeZone(java.util.TimeZone)