在做web应用开发时,经常有需求需要根据配置的参数来动态的更改页面的布局或头部和尾部,实现的框架有很多,比如说tiles,sitemesh;在这里我讲一下如何在运行期动态更新tiles的definition;
需求是:在应用中需要根据平台参数来展示不同页头页脚,在tiles中配置了页头的definition,如下:
如今需要根据平台的标识来动态指定header.jsp,如电信进来指定为114header.jsp,移动进来指定为1860header.jsp,实现的办法是配置definition的prepare属性,此属性的值为实现ViewPreparer,在此实现类得到平台标识,并根据平台标识设置相应的header jsp(平台标志位在web应用启动的时候设置入web上下文,如session中)
实现类操作如下:
重新配置header definition
需求是:在应用中需要根据平台参数来展示不同页头页脚,在tiles中配置了页头的definition,如下:
<definition name="header"
template="/WEB-INF/jsp/common/header.jsp" />
如今需要根据平台的标识来动态指定header.jsp,如电信进来指定为114header.jsp,移动进来指定为1860header.jsp,实现的办法是配置definition的prepare属性,此属性的值为实现ViewPreparer,在此实现类得到平台标识,并根据平台标识设置相应的header jsp(平台标志位在web应用启动的时候设置入web上下文,如session中)
实现类操作如下:
public class PlatFormViewPreparer implements ViewPreparer {
/**
* 功能:
*
* @param tilesContext
* @param attributeContext
*/
public void execute(TilesRequestContext tilesContext,
AttributeContext attributeContext) {
String platformIdString = (String) SessionUtil.getlVar("PLATFORMID");
if (platformIdString == null){
platformIdString = "";
}
attributeContext.setTemplateAttribute(new Attribute("/WEB-INF/jsp/common/"+platformIdString+"header.jsp"));
}
}
重新配置header definition
<definition name="header"
template="/WEB-INF/jsp/common/header.jsp" preparer="PlatFormViewPreparer "/>