鸿 网 互 联 www.68idc.cn

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

来源:互联网 作者:佚名 时间:2014-12-30 20:44
扩展Sitemesh3 DecoratorSelector实现基于请求参数调用装饰模板页面的实现://扩展入口Filter实现:packagelab.s2jh.core.web.sitemesh;importorg.sitemesh.Deco

//扩展入口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>


网友评论
<