FileDocCategorySizeDatePackage
LocaleFilter.javaAPI DocExample2127Wed Sep 15 20:24:50 BST 2004com.oreilly.strutsckbk.ch12

LocaleFilter.java

package com.oreilly.strutsckbk.ch12;

import java.io.IOException;
import java.util.Locale;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.jsp.jstl.core.Config;

import org.apache.struts.Globals;

public class LocaleFilter implements Filter {
    
    // the locale code used to create the locale (e.g. en_US)
    private String localeCode;
    
    // indicates if the locale should always be set;
    // even if there is currently one in the session
    private boolean ignore = false;

    public void init(FilterConfig filterConfig) throws ServletException {
        this.filterConfig = filterConfig;
        localeCode = filterConfig.getInitParameter("locale");
        ignore = Boolean.valueOf(filterConfig.getInitParameter("ignore")).booleanValue();
    }
   
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
                 throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;
        
        // create the session if needed
        HttpSession session = req.getSession();

        Locale currentLocale = (Locale) session.getAttribute(Globals.LOCALE_KEY);
        if (currentLocale == null || ignore) {
            // create the new locale
            Locale locale = new Locale(localeCode);

            // reset the Struts locale
            session.setAttribute(Globals.LOCALE_KEY, locale);
                
            // reset the JSTL locale
            Config.set(session, Config.FMT_LOCALE, locale);
        }
        chain.doFilter(request, response);
    }
    
    public void destroy() {
        // Nothing necessary
    }

    private FilterConfig filterConfig;
}