最近维护一个项目,因为这个项目我没作开发,所以需要先熟悉项目的框架和业务,昨天被一个问题给整懵了,我不管怎么看都弄不明白那个链接怎么跳过去的.因为那个链接地址跟实际看到的页面不一样.链接地址的页面只是实际看到页面的一小部分,反反复复盯着那个请求名,然后到struts.xml文件中去找实际的跳转页面,反复查了几遍确定没问题,但看到的页面的确跟struts.xml里面写的path不一样.
后来在项目中发现有个decorators.xml配置文件,google之,这才明白是它在作怪!
最近项目也比较清闲,所以把这个贴出来给大家看看:).
要使用decorator标签需要下载sitemesh.jar包.
decorator标签可以轻松解决页面布局的问题,轻松是因为相比<include>标签(需要在每个页面都用他引入JSP)而言,decorator标签的使用很简便,只需要在配置文件decorators.xml进行相应的配置再加上一个装饰器(其实就是一个JSP页面)即可.
decorators.xml
<decorators defaultdir="/decorators">
<excludes>
<pattern>/shared/*</pattern>
</excludes>
<decorator name="style" page="style.jsp">
<pattern>/*</pattern>
</decorator>
</decorators>
<excludes> 标签代表不对定义的请求名进行装饰
<decorator> 标签代表对定义的请求名进行相应的装饰
现在我门需要定义一个style.jsp文件,官方是称之为装饰器,俺觉得称他是模版文件更贴切
style.jsp
<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
<html>
<head>
<title><decorator:title default="装饰器页面..." /></title>
<decorator:head />
</head>
<body>
<p><font color="red">this is style's header</font></p>
<hr>
<decorator:body />
<hr>
<p><font color="red">this is style's footer</font></p>
</body>
</html>
需要注意的是style.jsp需要放在 根目录/decorators目录下面,当然decorators目录是需要自己建的.
在这个JSP里面,我们要用到decorator标签了,注意在用之前别忘了定义标签:
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
至于<decorator:title>,<decorator:head />,<decorator:body />的作用,后面再说!
然后要作的就是准备好我们访问的页面
index.jsp:
<%@ page contentType="text/html; charset=utf-8"%>
<html>
<head>
<title>decorator-index.jsp</title>
</head>
<body>
this is index.jsp. it's a simple page.
</body>
</html>
把这个页面放在 根目录下和 根目录/shared目录下面一份
现在把应用运行起来
访问:
http://localhost:8080/testDecorator/index.jsp
http://localhost:8080/testDecorator/shared/index.jsp
看看两个页面有什么不一样的?
没错,第一个链接看到的页面还包含style.jsp的东东.
而第二个链接却没有,是因为在decorators.xml文件在把这类的请求给过滤了.
现在明白<decorator:title>,<decorator:head />,<decorator:body />的作用了吗?
没错,他们依次负责输出用户所访问的页面中title,head,body标签之间的内容(不包含<title>,<head>,<body>标签).
decorator标签还有一些属性和用法,在这就不赘述了,大家自己研究吧
后来在项目中发现有个decorators.xml配置文件,google之,这才明白是它在作怪!
最近项目也比较清闲,所以把这个贴出来给大家看看:).
要使用decorator标签需要下载sitemesh.jar包.
decorator标签可以轻松解决页面布局的问题,轻松是因为相比<include>标签(需要在每个页面都用他引入JSP)而言,decorator标签的使用很简便,只需要在配置文件decorators.xml进行相应的配置再加上一个装饰器(其实就是一个JSP页面)即可.
decorators.xml
<decorators defaultdir="/decorators">
<excludes>
<pattern>/shared/*</pattern>
</excludes>
<decorator name="style" page="style.jsp">
<pattern>/*</pattern>
</decorator>
</decorators>
<excludes> 标签代表不对定义的请求名进行装饰
<decorator> 标签代表对定义的请求名进行相应的装饰
现在我门需要定义一个style.jsp文件,官方是称之为装饰器,俺觉得称他是模版文件更贴切
style.jsp
<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
<html>
<head>
<title><decorator:title default="装饰器页面..." /></title>
<decorator:head />
</head>
<body>
<p><font color="red">this is style's header</font></p>
<hr>
<decorator:body />
<hr>
<p><font color="red">this is style's footer</font></p>
</body>
</html>
需要注意的是style.jsp需要放在 根目录/decorators目录下面,当然decorators目录是需要自己建的.
在这个JSP里面,我们要用到decorator标签了,注意在用之前别忘了定义标签:
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
至于<decorator:title>,<decorator:head />,<decorator:body />的作用,后面再说!
然后要作的就是准备好我们访问的页面
index.jsp:
<%@ page contentType="text/html; charset=utf-8"%>
<html>
<head>
<title>decorator-index.jsp</title>
</head>
<body>
this is index.jsp. it's a simple page.
</body>
</html>
把这个页面放在 根目录下和 根目录/shared目录下面一份
现在把应用运行起来
访问:
http://localhost:8080/testDecorator/index.jsp
http://localhost:8080/testDecorator/shared/index.jsp
看看两个页面有什么不一样的?
没错,第一个链接看到的页面还包含style.jsp的东东.
而第二个链接却没有,是因为在decorators.xml文件在把这类的请求给过滤了.
现在明白<decorator:title>,<decorator:head />,<decorator:body />的作用了吗?
没错,他们依次负责输出用户所访问的页面中title,head,body标签之间的内容(不包含<title>,<head>,<body>标签).
decorator标签还有一些属性和用法,在这就不赘述了,大家自己研究吧