前2天我在论坛上提了一个问题 在struts(1.1)中如何重用Action ,这个帖子我自认为把问题已经说的很清楚.同时也说了几种解决方法,但是我需要是最优,最完美的解决方法,但是没想到帖子一发出去,效果甚微,回复人很少,.一开始我以为是我发的帖子的问题太基础.别人不屑回答,但是我把这个问题在本论坛搜索了一下,也有人问同样的问题,也一直没有人回复.我再把这个问题在百度和google搜索了一下,那提问的人就更多了,但是好象也一直没有得到解决.
在struts(1.1)中如何重用Action 这个问题说简单一点,就是如何包含一个Action 的执行结果.
我通过自己查询资料,pikachu的帮助,目前找到以下三种:
第一,使用tiles (但是不知道原理):
使用tiles虽然能成功,但是它的机制我一直没有弄清楚,因为它的配置比较无聊.
因为使用tiles想用<tiles:insert page="/test.do">成功的话,必须在struts-config.xml中配置
struts-config.xml里面配置TilesPlugin即:
- <plug-in className="org.apache.struts.tiles.TilesPlugin" >
- <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml" />
- <set-property property="definitions-parser-validate" value="true" />
- </plug-in>
在tiles-defs.xml这个配置文件只需要加入基本的标记(为空的话启动会报错)即:
- <tiles-definitions>
- <definition name="任意值" />
- </tiles-definitions>
只需要以上配置,你就可以使用<tiles:insert /> 包含任意的Action,至于为什么要这样配置,我现在也不是很清楚.但是org.apache.struts.tiles.TilesPlugin配置是必须的,配置org.apache.struts.tiles.TilesPlugin的时候是必须加入
- <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml" />
第二,使用<bean:include>和<bean:write>标记
在孙卫琴的精通struts是这样介绍bean:include>和<bean:write>标记的:
<bean:include>标签和标准的JSP标签<jsp:include>很相似,都可以用来包含其他web资源的内容,区别在于<bean:include>标签把其他web资源的内容存放在一个变量中,而不是直接显示在页面上.<bean:include>标签的id属性定义一个代表其他web资源的变量
<bean:write>标签用于在网页上输出某个Bean或它的属性的内容.其中它有一个filter属性,默认值为true.如果filter属性为true,将把输出内容中的特殊HTML符合作为普通字符串来显示;如果filter属性为false,则不会把输出内容中的热书HTML符号转化为普通字符串.
所以当我们想包含一个Action执行完以后返回的ActionForward包含的页面时候,只需如写写法:
- <bean:include id="test" page-"/test.do">
- <bean:write name="test" filter="false" >
第三,其他方式
我在网上搜索到一个blog的文章,他的意思改写struts的源代码,对于这种方法我没有试过,如果大家有兴趣可以去看看http://www.blogjava.net/rain1102/articles/96158.html
还有就是通过查询tiles相关资料,发现tiles有controllerUrl和ontrollerClass 属性:
controllerUrl 在页被插入前,控制器(controller)的直接URI 。 这个URI通常用来指示一个struct action. 这个控制器(action) 是用来为inserted tile 准备数据的。只能有 一个controllerUrl 或 controllerClass
controllerClass 页面(page)被插入前,直接调用的一种控制(control)类的类型。这个类是用来为inserted tile 准备数据的。只能有 一个controllerUrl 或 controllerClass 。这个类实现或扩展下列类之一:
org.apache.struts.tiles.Controller,
org.apache.struts.tiles.ControllerSupport,
或org.apache.struts.action.Action
但是种方式我也测试过,没有成功.
我基本上已经说完了,这3天一直在想办法解决这个问题,目前找到的就是第一种和第二种,我希望大家能够给出最好的解决方法.
最后非常感谢pikachu给我发的DEMO.
本文探讨了在 Struts 1.1 框架中重用 Action 的多种方法,包括使用 Tiles 和 bean:include 标签,并简要提及了修改 Struts 源代码的可能性。
1648

被折叠的 条评论
为什么被折叠?



