I would have created a LocaleResolver instead of registering an extra listener, that would have been easier. Basically the code in your Listener could have been in the resolver.
Code:
public class StrutsSessionLocaleResolver extends AbstractLocaleResolver {
public Locale resolveLocale(HttpServletRequest request) {
Locale locale = (Locale) WebUtils.getSessionAttribute(request, Globals.LOCALE_KEY);
if (locale == null) {
locale = determineDefaultLocale(request);
}
return locale;
}
/**
* Determine the default locale for the given request,
* Called if no locale session attribute has been found.
* <p>The default implementation returns the specified default locale,
* if any, else falls back to the request's accept-header locale.
* @param request the request to resolve the locale for
* @return the default locale (never <code>null</code>)
* @see #setDefaultLocale
* @see javax.servlet.http.HttpServletRequest#getLocale()
*/
protected Locale determineDefaultLocale(HttpServletRequest request) {
Locale defaultLocale = getDefaultLocale();
if (defaultLocale == null) {
defaultLocale = request.getLocale();
}
return defaultLocale;
}
public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
WebUtils.setSessionAttribute(request, Globals.LOCALE_KEY, locale);
}
}
But if it works, it works
. that i the most important basically in the end, at least for the end user.