struts2action与struts.xml传参问题

struts2 通过配置struts.xml看action之间如何传递参数2010-11-11 113752 分类: 默认分类 标签:struts 两个 action 之间 传递 字号大中小 订阅 .

需求功能是这样:Action1 获取数据库配置内容,得到相应Model的 动态URL ,这里的URL 有的是Action有的是JSP页面。


1.使用result 类型中的 redirect 类型,如下:
result name=success type=redirect${dynamicUrl}objectId=${objectId}&param1=${param1}result
这样传参才能达到Action取参数的需要,如果要是加上 :
param name=param1${param1}param
param name=items${items}param

那么 param1 和 items 这两个参数都无法从目标Action里得到,如果想得到的话只能用 objectId=${objectId}&param1=${param1} 这种方式,或者用 session来实现,这样就有点复杂了,而且使用起来也相当的不方便。后来又尝试了第二种方式:

2.使用result类型中的redirect-action类型 如下:
result name=success type=redirect-action
param name=actionName${actionName}param
param name=namespace${namespace}param
result
此时,result之间不能再设其它的自定义的参数了,因为 redirect-action对应的是 org.apache.struts2.dispatcher.ServletActionRedirectResult ,而actionName和namespace是它的两个属性,还有一个重要属性就是methodName,如果要再加其它自己定的参数,只能扩展该类了。我在此基础上,又在result 之外添加了几个param 参数,如:

param name=param1${param1}param
param name=param2${param2}param
result name=success type=redirect-action
param name=actionName${actionName}param
param name=namespace${namespace}param
result
但是还是不能将 param1和param2两个参数传到目标Action中。既然Struts2有这种机制,那么它就一定能够实现,两个Action的动态传参,只是我对它不了解而已,后来,我又翻出来Strut2的源码和XWork的源码,再结果网上的资料,又尝试了第三种方式,终于可以了。

3.使用reulst 类型中chain类型 如下:

action name=getTemplate class=tabAction method=getTemplateByParas
param name=objectId${objectId}param
param name=param1${param1}param
param name=items${items}param

result name=success type=chain
param name=actionName${actionName}param
param name=namespace${namespace}param
result

action

这样就可以实现传参了,这里的参数所有对象都可以传,包括map,List,set 等集合也可以。同时这里还需要注意一个小问题,chain这种类型是XWork中的result类型,它对应的类是:
com.opensymphony.xwork2.ActionChainResult . 这里需要注意一个小问题, actionName,namespace都是他的属性,所以对于传过的URL参数要做一下处理。
actionName必须是Action的名称,namespace是他命名空间,必须以开头,如:
tabgetTemplate.action 则 namespace=tab ; actionName=”getTemplate“;

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

Struts2之两个Action传值和不传值的struts.xml文件配置
分类: Struts2的学习 2008-11-21 16:03 890人阅读 评论(0) 收藏 举报
例如 在执行完action1之后要直接跳转到action2,并且action1要传一些参数给action2,在struts.xml文件中的配置如下:
<action name="action1" method="" class="">
<result name="success" type="chain">
<param name="actionName">action2</param>
<param name="param1">${param1}</param>
<param name="param2">${param2}</param>
</result>
</action>

注意:
1. 若param1和param2是两个变量,那么在两个action中都要有他们的getter和setter
2. 若param1是常量,那么在action1中只要有一个param1的getter,在action2中要有param1的getter和setter

如果在两个action之间直接跳转而不用传参数,struts.xml文件可以和上面一样,只是没有param标签,还可以使用如下配置:
<action name="action1" method="" class="">
<result name="success" type="redirectAction">action2.action</result>
</action>
即可

你可能感兴趣的:(struts.xml)