请教: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的装饰是如何选择的.
...全文
163 14 打赏 收藏 转发到动态 举报
写回复
用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啊
概述 Struts 2.0提供一个Sitemesh插件,允许在Sitemesh模板使用Struts标记。 要使用Sitemesh需要包含Freemark,SitemeshSitemesh插件库文件。 配置过滤器 如果需要使用Freemark模板文件作为装饰器文件,需要在web.xml文件添加如下配置: xml 代码 struts-cleanup org.apache.struts2.dispatcher.ActionContextCleanUp filter> sitemesh com.opensymphony.module.sitemesh.filter.PageFilter filter> struts2 org.apache.struts2.dispatcher.FilterDispatcher filter> struts-cleanup /* filter-mapping> sitemesh /* filter-mapping> struts2 /* filter-mapping> 注意ActionContextCleanUp过滤器必须在FilterDispatcher之前配置,ActionContextCleanUp的主要功能是通知FilterDispatcher执行完毕不要清除ActionContext,以便sitemesh装饰器可以访问Struts值堆栈。 配置装饰器 在WEB-INF目录下创建一个decorator.xml文件,指定装饰器需要匹配哪些文件,下述示例指定main.flt将装饰所有的jsp文件: xml 代码 xml version="1.0" encoding="ISO-8859-1"?> /exclude.jsp /exclude/* /* decorators> 如果需要自定义装饰器映射器,需要在WEB-INF目录下创建一个sitemesh.xml文件(通常从发布包拷贝过来更改相应部分)。这一步骤是可选的,通常缺省的配置就能够满足要求。 定义装饰器文件 缺省情况下,sitemesh假定装饰器文件保存在应用上下文根路径下的decorators目录下,如果采用如上配置,装饰器文件应该是ftl格式,如果需要使用其他格式,需要更改过滤器配置。

67,516

社区成员

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

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