SiteMesh是一个装饰前台页面的极佳的framework。按照官方介绍,五分钟能入门,十分钟能熟练使用.甚至其所谓的高级特性对于我们勤劳的程序员来说也是一个薄薄的纸老虎,一戳就碎。壮哉,我大IT。
但是SiteMesh在同时装饰两个页面的时候就会遇到一点先天性的瓶颈。比如我的页面分为四个部分,top,header,leftMenu,MainArea。现在的要求是top.jsp上面点击相关的菜单的时候,是需要menu.jsp需要进行联动的。这里使用jQUery的Ajax是一个不错的折中方案。话不多说,上一个Demo的代码:
装饰器配置文件,decorators.xml
<?xml version="1.0" encoding="UTF-8"?>
<decorators defaultdir="/decorators">
<excludes>
<pattern>/*.html</pattern>
</excludes>
<decorator name="main" page="main.jsp">
<pattern>/*.action</pattern>
</decorator>
<decorator name="menu" page="menu.jsp"/>
</decorators>
menu.jsp的文件,下面的代码是硬编码,可以修改为自己想要的:
<head>
<title>Welcome to use AdminPortal</title>
<script type="text/javaScript" src="resources/js/jquery-1.8.3.min.js"></script>
<s:head/>
</head>
<body>
<div id="dynamicMenu"></div>
<script type="text/javaScript">
$(document).ready(function(){
var i = "${sessionScope.menuLevel}";
if(i=="1"){
$("#dynamicMenu").empty().load("resources/a.html");
}else if(i=="2"){
$("#dynamicMenu").empty().load("resources/b.html");
}else if(i=="3"){
$("#dynamicMenu").empty().load("resources/c.html");
}else if(i=="4"){
$("#dynamicMenu").empty().load("resources/d.html");
}else if(i=="5"){
$("#dynamicMenu").empty().load("resources/e.html");
}
});
</script>
</body>
public String execute() throws Exception {
ActionContext.getContext().getSession().put("menuLevel", level);
demoBiz.doSth();
return SUCCESS;
}
作者 陈字文(热衷于PM\ORACLE\JAVA等,欢迎同行交流)EMAIL:ziwen@163.com QQ:409020100