Struts2的两个Action之间传参的问题。

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

1.使用result 类型中的  redirect 类型,如下:

<result name="success" type="redirect">${dynamicUrl}?objectId=${objectId}&amp;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是他命名空间,必须以"/"开头,如:

/tab/getTemplate.action       则 namespace="/tab"   ;  actionName=”getTemplate“;     这是小弟在使用Struts2时,

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

struts2配置文件中参数的传递

在Action中我们经常会从这个Action跳转到另一个Action中,如果只是简单的跳转那么很容易,只需在struts配置文件中添加一个result,如:

<result name="index">/manager/managerInfo/account.jsp</result>.

result有一个type属性,这里的type默认是dispatcher,但这种情况下action之间是不能发送请求的,这时我们就要用到redirect、redirect-action、chain,

当要请求一个action时,可设定type的值为以上三个中的一个(他们的区别请参见blog.sina.com.cn/s/blog_56b7aaa10100eqs4.html),如:<result name="reload" type="redirectAction" >/manager/managerInfo/account.action</result>.

如果想在请求的过程中添加参数可以像超链接传值一样在最后用"xx?xx=xx"的形式来传递参数.

如:<result name="reload" type="redirectAction">/manager/ managerInfo/account.action?参数名=参数值</result>,

如果这里的参数值不是一个固定值可以用"${参数值}"这种形式,需要注意的是这里的"参数值"在相应的Action中一定要提供get/set方法,

否则将无法获得参数值,当然这里也同样可以取一个对象的某个属性值即:${对象名.属性名},假如我想取得一个帐户的帐号:<result name="reload" type="redirectAction" >/manager/managerInfo/account.action?account.accountNO=${account.accountNO}</result>.

 如果想传递多个参数用"&"符号来连接吗?NO,因为用"&"会在XML语法检查中报错,所以将"&"用"&amp;"来替换就行了!如:

<result name="reload" type="redirectAction" >/manager/managerInfo/account.action?account.accountNO=${account.accountNO}&amp;account.balance=${account.balance}</result>.

注:当使用type="redirectAction"时,result中的.action可要可不要,但是当你要传递参数里,而且参数中含有中文字符时一定不要加.action,

否则你的参数值是无法传递的,这是自己后来才发现的,大家有兴趣的可以去试试...

Struts2 Action 动态传参数的更多相关文章

  1. Struts2配置文件动态传参

    两个Action动态传递参数: 1.从一个Action传递到另一个Action如果带有参数那么result中的type属性需要使用redirect 第一个Action代码如下: private Str ...

  2. uploadify 后台动态传参数

    最近项目中用到上传控件,参数需要动态传参,经过查询总结了一下Uploadify 动态传参 jQuery(document).ready(function () { var ctrlid = getQu ...

  3. uploadify 3.2 后台动态传参数

    最近在弄一个上传的小功能,需要往后台传递一些动态参数,网上有一些传参数可能是因为版本不对也没成功.仔细看了官网的一些说明,搞定了. 3.2中传递参数用的的是'formData':{'somekey': ...

  4. struts2 action接收请求参数和类型转换

    1,action接收请求参数 在struts2中action是什么?(struts2是一个mvc框架)         V:jsp        M:action         C:action  ...

  5. struts2 action 接受数组参数为Null的问题

    public List<FormulaDetail> formulaDetails; public List<FormulaDetail> getFormulaDetails( ...

  6. JavaScript给onclick事件赋值,动态传参数实例辩错

    错误的例子: <body> <input id="certid" type="text" value="123456" & ...

  7. uploadifive 1.1.2 动态传参

    之前用过Flash版本的uploadify,写过一篇关于uploadify动态传参的文章(点击打开链接).后来有了HTML5版本的上传控件,叫uploadifive,测试着用了一下,效果还不错.这里主 ...

  8. DophineSheduler上下游任务之间动态传参案例及易错点总结

    ​   作者简介 ​ 淡丹 数仓开发工程师 5年数仓开发经验,目前主要负责百得利MOBY新车业务 二手车业务及售后服务业务系统数仓建设   业务需求 在ETL任务之间调度时,我们有的时候会需要将上游的 ...

  9. Struts2的动态Action和全局跳转视图以及配置各项默认值

    1:Struts2的默认访问后缀是.action(特别需要注意的是改了配置文件web.xml或者struts.xml需要重启服务器) 2:Struts2中常用的常量介绍:<!-- 一:全局配置 ...

随机推荐

  1. bs4_3select()

        Finding an Element with the select() Method 调用select()方法从BeautifulSoup对象索取网页元素,并用CSS 选择器传递你寻找的元素 ...

  2. Java数据库——使用元数据分析数据库

    在JDBC中提供了DatabaseMetaData和ResultSetMetaData接口来分析数据库的元数据. DatabaseMetaData 使用DatabaseMetaData取得数据库的元信 ...

  3. JSP 属性范围

    参考文献:http://www.cnblogs.com/xdp-gacl/p/3781056.html 一.属性范围 所谓的属性范围就是一个属性设置之后,可以经过多少个其他页面后仍然可以访问的保存范围 ...

  4. UITableViewCell的separator分隔线设置失效

    // 处理separator -(void)viewDidLayoutSubviews { if ([self.tableView respondsToSelector:@selector(setSe ...

  5. live555在Raspberry Pi上的点播/直播

    1.live555在Raspberry Pi上的点播 live555MediaServer这个实例是个简单的服务器,支持多媒体点播,直接在Raspberry Pi上编译运行,或者通过交叉编译出ARM核 ...

  6. [webgrid] – header - (How to Add custom html to Header in WebGrid)

    How to Add custom html to Header in WebGrid MyEvernote Link Posted on March 30, 2013by mtryambake Ho ...

  7. 常用的MIME类型

    .doc     application/msword .docx   application/vnd.openxmlformats-officedocument.wordprocessingml.d ...

  8. BeanNameAware接口和BeanFactoryAware接口

    迄今为止,所接触到的Bean都是“无知觉”的,就像黑客帝国中机械工厂里面“养殖”的人类,他们虽然能完成一定的功能,但是根本不知道自己在工厂(BeanFactory)中的代号(id),或者自己是在哪个工 ...

  9. 【8-15】Markdown语法学习

    学习Markdown语法 来源简书URL #,支持六级标题 列表 用-或*(指无序列表),有序列表直接1. 2. 3. 这样,中间有空格,可乱序(-+*都可,不能混合使用,混合使用为嵌套) 这是一个无 ...

  10. Linux服务器管理: 系统的进程管理后台进程的切换和相关命令

    1.把进程放入到后台: [root@localhost/]#tar -zcf etc.tar.gz /etc &           //这种方法是在后台运行的 [root@localhost ...