- 扩展入口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>
时间: 2024-10-21 05:44:29