码迷,mamicode.com
首页 > 其他好文 > 详细

扩展Sitemesh3 DecoratorSelector实现基于请求参数调用装饰模板页面的实现

时间:2014-12-26 20:25:52      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:

  • 扩展入口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<WebAppContext> 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<WebAppContext> {

    private DecoratorSelector<WebAppContext> defaultDecoratorSelector;

    public ParamDecoratorSelector(DecoratorSelector<WebAppContext> 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配置:

    <filter>
        <filter-name>sitemeshFilter</filter-name>
        <filter-class>lab.s2jh.core.web.sitemesh.ParamConfigurableSiteMeshFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>sitemeshFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>



扩展Sitemesh3 DecoratorSelector实现基于请求参数调用装饰模板页面的实现

标签:

原文地址:http://my.oschina.net/s2jh/blog/361044

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!