package com.opensymphony.module.sitemesh.mapper; import com.opensymphony.module.sitemesh.Config; import com.opensymphony.module.sitemesh.Decorator; import com.opensymphony.module.sitemesh.DecoratorMapper; import com.opensymphony.module.sitemesh.Page; import javax.servlet.http.HttpServletRequest; import java.util.Properties; /** * <p>Will look at a session attribute to find the name of an appropriate decorator to use. If the * session attribute is present, the mapper will not do anything and allow the next mapper in the chain * to select a decorator.</p> * * <p>By default, it will look at the 'decorator' session attribute, however this can be overriden by * configuring the mapper with a 'decorator.parameter' property.</p> * * @author Ricardo Lecheta */ public class SessionDecoratorMapper extends AbstractDecoratorMapper { private String decoratorParameter = null; public void init(Config config, Properties properties, DecoratorMapper parent) throws InstantiationException { super.init(config, properties, parent); decoratorParameter = properties.getProperty("decorator.parameter", "decorator"); } public Decorator getDecorator(HttpServletRequest request, Page page) { Decorator result = null; String decorator = (String) request.getSession().getAttribute(decoratorParameter); //get decorator from HttpSession if (decorator != null) { result = getNamedDecorator(request, decorator); } return result == null ? super.getDecorator(request, page) : result; } }