请教:sitemesh如何装饰Struts 2中的action的问题

oO临时工Oo 2011-03-30 06:02:45
本人现在程序中存在的问题:
使用sitemesh进行装饰所有页面,但是当请求是Struts的action(例如*.do,*.action)时,就不能装饰.
注:现在所有的.jsp 和.action都在应用根目录下.
配置文件如下:
decorators.xml

<decorators defaultdir="/">
<decorator name="frame" page="template.jsp">
<pattern>/*</pattern>
</decorator>
</decorators>


web.xml

<!-- SiteMesh -->
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>
com.opensymphony.module.sitemesh.filter.PageFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<jsp-config>
<taglib>
<taglib-uri>sitemesh-page</taglib-uri>
<taglib-location>
/WEB-INF/sitemesh-page.tld
</taglib-location>
</taglib>

<taglib>
<taglib-uri>sitemesh-decorator</taglib-uri>
<taglib-location>
/WEB-INF/sitemesh-decorator.tld
</taglib-location>
</taglib>
</jsp-config>


struts.xml


<action name="car" class="struts.action.Car_jsp_Action">
<result name="success">car.jsp</result>
<result name="input">car.jsp</result>
</action>

请问:
1:有没有办法让sitemesh也能装饰.action的请求页面.
2:sitemesh处理资源的原理是怎样的呢,对于.jsp .jpg .js .html .do .action .css的装饰是如何选择的.
...全文
172 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
guduyishuai 2011-11-30
  • 打赏
  • 举报
回复
amos1989谢谢啊!
学习了!
JerseyGod 2011-04-12
  • 打赏
  • 举报
回复
感谢amos1989
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>*.jsp</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
这种配置方式非常好用!
amos1989 2011-03-30
  • 打赏
  • 举报
回复
这个没啥。。。呵呵,就是提了一下我的扩展应用。
oO临时工Oo 2011-03-30
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 amos1989 的回复:]
<siderbar>的配置文件,也就是他的页面配置xml 文件,我已经给他扩展过了。。。

他的那个格式太固定了。。 一级导航,二级导航,然后到左边的三级导航。。。。每次都是需要的。。太不灵活,扩展了一下,可以根据自己的需要,决定是否显示。。
[/Quote]

你这个说的是什么?
oO临时工Oo 2011-03-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 amos1989 的回复:]
原来楼主在线等列??呵呵

记得。。我要全分。。。
[/Quote]

先回复,再参考你的方法解决,最后给分
amos1989 2011-03-30
  • 打赏
  • 举报
回复
<siderbar>的配置文件,也就是他的页面配置xml 文件,我已经给他扩展过了。。。

他的那个格式太固定了。。 一级导航,二级导航,然后到左边的三级导航。。。。每次都是需要的。。太不灵活,扩展了一下,可以根据自己的需要,决定是否显示。。
amos1989 2011-03-30
  • 打赏
  • 举报
回复
原来楼主在线等列??呵呵

记得。。我要全分。。。
amos1989 2011-03-30
  • 打赏
  • 举报
回复
这个问题。。。呵呵 我刚开始弄的时候,也碰到过这个问题。。。
问题出现在那里列?

默认情况下,filter 的拦截范围是:reuqest,也就是说只会对请求进行拦截,这个就包括了重定向redirect,因为redirect是重新请求一次服务器。 而你的forward转发方式,拦截器就拦截不到。因为他是服务器部定向,没有重新发请求。。

好了,既然我们知道了问题的所在,那就开始解决问题吧:
打开web.xml配置如下:

<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>*.jsp</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>


为什么只需要拦截.jsp列? 因为不管你是请求servlet 还是 action.. 到最后,都会转发到某个jsp页面进行展示
你只需拦截.jsp 就可以保证所有页面都会装饰出来。。

而且会减少拦截次数。。。个人觉得在性能上有一定提升。
oO临时工Oo 2011-03-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 amos1989 的回复:]
想不到还有人跟我们一样用sitemesh...嘿嘿。。。好,先回复再看一下你的问题。
[/Quote]
有类似于sitemesh但比sitemesh好的解决方案吗?或者能做sitemesh的功能的方案?
amos1989 2011-03-30
  • 打赏
  • 举报
回复
想不到还有人跟我们一样用sitemesh...嘿嘿。。。好,先回复再看一下你的问题。
oO临时工Oo 2011-03-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yewuqing007 的回复:]
<!-- SiteMesh -->
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>
com.opensymphony.module.sitemesh.filter.PageFilter
</filter-class>
</filter>
<filter-mapping>
<fil……
[/Quote]
那我的.jsp怎么办呢
devin_jia 2011-03-30
  • 打赏
  • 举报
回复
<!-- SiteMesh -->
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>
com.opensymphony.module.sitemesh.filter.PageFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
你可以改为/*.action啊

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧