当前位置: 代码迷 >> Web前端 >> Sitemesh 的路径有关问题
  详细解决方案

Sitemesh 的路径有关问题

热度:441   发布时间:2012-11-04 10:42:42.0
Sitemesh 的路径问题

Sitemesh的问题让人非常头痛,搞了一天。现把心得整理一下

?

首先是decorator.xml里面的配置问题

?

 <decorator name="admin" page="admin.jsp">
        <pattern>/index/login.jsp</pattern>
        <pattern>/index/index.jsp</pattern>
        <pattern>/common/journal/journalHome.jsp</pattern>
    </decorator>

?定义了amin这个装饰器装修的页面,均采用绝对路径

?

其次是装饰器页面里的路径,分为两部分,

<link  rel="stylesheet" type="text/css" href="<%=application.getContextPath()%>/decorators/main.css">

?

这些HTML标签里的 href可以用="<%=application.getContextPath()%>/获得应用环境的路径,没问题

?

但是

<page:applyDecorator page="<%=application.getContextPath()%>/decorators/nav.jsp" name="panel"  encoding="UTF-8" />

?就有问题了,总是编译不过,是否写错了,还是不能这样用,还在研究中

?

不过有一点还是明白的,那就sitemesh过滤器对当前的请求地址进行处理,截取最后一个/前的地址,再加到<page:applyDecorator>标签中的page属性上,如当前请求

http://localhost:8080/macaulites/common/journal/journalHome.jsp

?

<page:applyDecorator page="/decorators/nav.jsp" name="panel"  encoding="UTF-8" />

?

最后得到的地址是

?

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}

?

?

另个转载一下:http://jeoff.blog.51cto.com/186264/90354