好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Struts2:两个Action 动态传参数

两个Action 动态传参数 研究了近两天的时间,终于把一个很简单的问题给搞定了,那它是什么问题呢?就是Struts2的两个Action之间传参的问题。 需求功能是这样:Action1 获取数据库配置内容,得到相应Model的动态URL ,这里的URL 有的是Action有的是JSP页面。

使用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来实现,这样就有点复杂了,而且使用起来也相当的不方便。后来又尝试了第二种方式:

使用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] 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是他命名空间,必须以]/]开头,如: /tab/getTemplate.action 则namespace=]/tab] ; actionName=]getTemplate[;

这是小弟在使用Struts2时,遇到两个Action动态传参的问题时总结的心得,希望对个位同仁有所帮助,不当之处,请多指教。

查看更多关于Struts2:两个Action 动态传参数的详细内容...

  阅读:47次