Sitemesh的问题让人非常头痛,搞了一天。现把心得整理一下
首先是decorator.xml里面的配置问题
定义了amin这个装饰器装修的页面,均采用绝对路径
其次是装饰器页面里的路径,分为两部分,
这些HTML标签里的 href可以用="<%=application.getContextPath()%>/获得应用环境的路径,没问题
但是
就有问题了,总是编译不过,是否写错了,还是不能这样用,还在研究中
不过有一点还是明白的,那就sitemesh过滤器对当前的请求地址进行处理,截取最后一个/前的地址,再加到<page:applyDecorator>标签中的page属性上,如当前请求
http://localhost:8080/macaulites/common/journal/journalHome.jsp
最后得到的地址是
http://localhost:8080/macaulites/common/journal/decorators/nav.jsp
所以经常出现找不到页面的问题,我们在装饰器标签的page属性用绝对地址"/macaulites"有问题,但用另一种绝对地址形式则无问题如
http://localhost:8080/macaulites/decorators/nav.jsp
现在项目的sitemesh路径的解决方法是:href src 等用 /macaulites/...... 这种形式的绝对路径
page 属性用 http://localhost:8080/macaulites/ 这种绝对路径
但是上面还是有问题,page属性采用上面那种绝对路径会产生页面乱码,最终用${application.contextPath}解决了所有问题
试一下${pageContext.request.contextPath}