当前位置:Gxlcms > html代码 > 扩展Sitemesh3DecoratorSelector实现基于请求参数调用装饰模板页面的实现_html/css_WEB-ITnose

扩展Sitemesh3DecoratorSelector实现基于请求参数调用装饰模板页面的实现_html/css_WEB-ITnose

时间:2021-07-01 10:21:17 帮助过:40人阅读

扩展入口Filter实现:

package lab.s2jh.core.web.sitemesh;import org.sitemesh.DecoratorSelector;import org.sitemesh.builder.SiteMeshFilterBuilder;import org.sitemesh.config.ConfigurableSiteMeshFilter;import org.sitemesh.webapp.WebAppContext;/** * 扩展实现注入基于request参数decorator值进行动态定位装饰器的选择器 */public class ParamConfigurableSiteMeshFilter extends ConfigurableSiteMeshFilter {    protected void applyCustomConfiguration(SiteMeshFilterBuilder builder) {        //获取原有默认配置装饰选择器        DecoratorSelector defaultDecoratorSelector = builder.getDecoratorSelector();        //赋给自定义装饰选择器,则自定义规则未匹配时调用默认选择器获取        builder.setCustomDecoratorSelector(new ParamDecoratorSelector(defaultDecoratorSelector));    }}

定制装饰选择器实现:

package lab.s2jh.core.web.sitemesh;import java.io.IOException;import javax.servlet.http.HttpServletRequest;import org.apache.commons.lang3.StringUtils;import org.sitemesh.DecoratorSelector;import org.sitemesh.content.Content;import org.sitemesh.webapp.WebAppContext;/** * 基于request参数decorator值进行动态定位装饰器的选择器 * 如果decorator参数有值,则返回"/WEB-INF/views/layouts/" + decorator + ".jsp"作为目标装饰模板页面 */public class ParamDecoratorSelector implements DecoratorSelector {    private DecoratorSelector defaultDecoratorSelector;    public ParamDecoratorSelector(DecoratorSelector defaultDecoratorSelector) {        this.defaultDecoratorSelector = defaultDecoratorSelector;    }    public String[] selectDecoratorPaths(Content content, WebAppContext context) throws IOException {        // build decorator based on the request        HttpServletRequest request = context.getRequest();        String decorator = request.getParameter("decorator");        if (StringUtils.isNotBlank(decorator)) {            //按照参数值返回对应路径下面的jsp装饰模板页码            return new String[] { "/WEB-INF/views/layouts/" + decorator + ".jsp" };        }        // Otherwise, fallback to the standard configuration        return defaultDecoratorSelector.selectDecoratorPaths(content, context);    }}

调整web.xml配置:

            sitemeshFilter        lab.s2jh.core.web.sitemesh.ParamConfigurableSiteMeshFilter                sitemeshFilter        /*    

人气教程排行