原创作者: zdz8207   阅读:17406次   评论:3条   更新时间:2011-05-26    

sitemesh装饰模式的强大就不用说了,但使用过程中遇到的最郁闷的莫过于排除装饰action的困扰了,例如使用某个ajax请求要求返回不装饰的数据,但sitemesh却死活给你装饰了,以前用了个小技巧绕过了sitemesh的装饰--在返回的头部声明为xml类型:ServletActionContext.getResponse().setContentType("text/xml;charset=utf-8");

看了文档知道sitemesh默认装饰所有text/html的页面的,要装饰其他类型的页面还得自己配置。

但是总觉得这样很麻烦,况且有些页面是对外公开的api页面,只需要显示内容给其他iframe嵌入,这个时候如何排除呢?

在excludes里面排除的却总是不起作用!

经过查阅文档和不断的实践终于发现无法排除的原因了,原来排除的是相对于url目录层次的,而非文件所在的目录!

 

<!-- 在excludes元素下指定的页面将不会由SiteMesh来装饰 -->
 <excludes>
  <pattern>/index.jsp</pattern>
  <pattern>/scripts/*.*</pattern>
  <pattern>/htmleditor/*.*</pattern>
  <pattern>/chart/*.*</pattern>//排除chart目录下的所有action请求
  <pattern>/flash/*.*</pattern>
  <pattern>/other/*.*</pattern>
  <pattern>/remote_requst.action*</pattern>//排除根目录下的remote_requst.action包括带参数的请求,如果action后面不带*则只能排除不带参数的请求
 </excludes>

<decorator name="global" page="global.ftl">
  <pattern>*.action</pattern>
 </decorator>
 <decorator name="editor" page="blog.ftl" webapp="/editor/">
  <pattern>/editor/*.action</pattern>
 </decorator>
 
 <decorator name="browser" page="blog.ftl" webapp="/browser/">
  <pattern>/browser/*.action</pattern>
 </decorator>
 
 <decorator name="admin" page="admin.ftl" webapp="/admin/">
  <pattern>/admin/*.action</pattern>
 </decorator>

评论 共 3 条 请登录后发表评论
3 楼 jackyrong 2013-05-21 21:55
发现sitemesh有的时候要exclude的页面和地址太多,随着系统的庞大,有
什么办法比较好呢
2 楼 zdz8207 2009-07-10 16:30
可以看看我另外一篇文章,我开发过程中已经解决了所有遇到的问题。
http://www.javaeye.com/wiki/coos/1803-html-after-sitemesh-decorative-chinese-garbled-solution
1 楼 bohemia 2009-07-10 15:41
看了SiteMesh的源码, 里面的正则匹配的部分,复杂啊.. 稍不留神,就给装饰了.
另外就是file.encoding的编码设置问题. 不好..如果都能可配置就好了.

发表评论

您还没有登录,请您登录后再发表评论

文章信息

  • zdz8207在2009-07-10创建
  • zdz8207在2011-05-26更新
  • 标签: sitemesh
Global site tag (gtag.js) - Google Analytics