You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

See parent page to see what this code is about.

package com.example.wicket.filter;

import org.apache.wicket.Application;
import org.apache.wicket.protocol.http.WebApplication;

import javax.servlet.*;
import java.io.IOException;

/**
 * Filter that sets the wicket application, just like {@link org.apache.wicket.protocol.http.WicketFilter}
 * would do.
 *
 * <p>This implementation assumes that it is placed in a filter chain, <i>after</i> WicketFilter,
 * for URLs that are not handled by the WicketFilter.
 *
 * <p>The filter name of the wicket filter is retrieved from the init parameter wicketFilterName.
 *
 * @author Erik van Oosten
 */
public class WicketApplicationFilter implements Filter {

    private WebApplication webApplication;

    public void init(FilterConfig filterConfig) throws ServletException {
        // Get instance of the Wicket application, it is set by the Wicket filter.
        String contextKey = "wicket:" + filterConfig.getInitParameter("wicketFilterName");
        webApplication = (WebApplication) filterConfig.getServletContext().getAttribute(contextKey);

        if (webApplication == null) {
            throw new ServletException("Could not find the Wicket application, please make " +
                    "sure filter WicketApplicationFilter is embedded in Wicket's filter");
        }
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        try {
            // Set the webapplication for this thread
            Application.set(webApplication);

            chain.doFilter(request, response);

        } finally {
            // always unset the application thread local
            Application.unset();
        }
    }

    public void destroy() {
        webApplication = null;
    }
}
  • No labels