两个Action 动态传参数
研究了近两天的时间,终于把一个很简单的问题给搞定了,那它是什么问题呢?就是Struts2的两个Action之间传参的问题。
需求功能是这样:Action1 获取数据库配置内容,得到相应Model的 动态URL ,这里的URL 有的是Action有的是JSP页面。
1.使用result 类型中的 redirect 类型,如下:
那么 param1 和 items 这两个参数都无法从目标Action里得到,如果想得到的话只能用 objectId=${objectId}¶m1=${param1} 这种方式,或者用 session来实现,这样就有点复杂了,而且使用起来也相当的不方便。后来又尝试了第二种方式:
2.使用result类型中的redirect-action类型 如下:
此时,result之间不能再设其它的自定义的参数了,因为 redirect-action对应的是 org.apache.struts2.dispatcher.ServletActionRedirectResult ,而actionName和namespace是它的两个属性,还有一个重要属性就是methodName,如果要再加其它自己定的参数,只能扩展该类了。我在此基础上,又在result 之外添加了几个param 参数,如:
但是还是不能将 param1和param2两个参数传到目标Action中。既然Struts2有这种机制,那么它就一定能够实现,两个Action的动态传参,只是我对它不了解而已,后来,我又翻出来Strut2的源码和XWork的源码,再结果网上的资料,又尝试了第三种方式,终于可以了。
3.使用reulst 类型中chain类型 如下:
这样就可以实现传参了,这里的参数所有对象都可以传,包括map,List,set 等集合也可以。同时这里还需要注意一个小问题,chain这种类型是XWork中的result类型,它对应的类是:
这是小弟在使用Struts2时,遇到两个Action动态传参的问题时总结的心得,希望对个位同仁有所帮助,不当之处,请多指教。
本文出自 http://jakemanse.blog.51cto.com/1198141/273871
研究了近两天的时间,终于把一个很简单的问题给搞定了,那它是什么问题呢?就是Struts2的两个Action之间传参的问题。
需求功能是这样:Action1 获取数据库配置内容,得到相应Model的 动态URL ,这里的URL 有的是Action有的是JSP页面。
1.使用result 类型中的 redirect 类型,如下:
<result name="success" type="redirect">${dynamicUrl}?objectId=${objectId}¶m1=${param1}</result> 这样传参才能达到Action取参数的需要,如果要是加上 : <param name="param1">${param1}</param> <param name="items">${items}</param>
那么 param1 和 items 这两个参数都无法从目标Action里得到,如果想得到的话只能用 objectId=${objectId}¶m1=${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动态传参的问题时总结的心得,希望对个位同仁有所帮助,不当之处,请多指教。
本文出自 http://jakemanse.blog.51cto.com/1198141/273871
发表评论
-
Spring MVC Controller单例陷阱
2014-09-12 10:01 978Spring MVC Controller默认是单例的: 单 ... -
Spring MVC模型(Model)层和视图(View)层
2014-04-20 18:57 0Spring MCV中Model层是View层的数据容器,Js ... -
springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序
2014-04-20 18:52 3125spring mvc处理方法支持如下的返回方式:ModelAn ... -
spring mvc常用注解@Component @Controller @Service @Repository
2014-03-13 16:10 9250注解用了之后,会在*.xml文件中大大减少配置量。以前我们每个 ... -
applicationContext.xml 配置文件在web.xml中的写法
2014-03-11 16:28 2833applicationContext.xml 配置文件的一些认 ... -
SpringMVC和Struts2的比较
2014-02-27 19:12 798通俗说Spring的作用 Spring ... -
Struts-config.xml配置文件《action-mappings》元素的详解
2014-02-26 13:12 2504action-mappings 该元素用于将Action元素定 ... -
使用Hibernate向mysql数据库中插入中文,数据库中显示??乱码
2014-02-24 23:02 1057[size=medium]通过网上学习,要求修改Hiberna ... -
在web.xml中通过contextConfigLocation配置spring
2014-02-24 21:19 2384在web.xml中通过contextConfigLocatio ... -
Struts-config.xml配置action-mappings元素略计
2014-02-24 16:58 683action-mappings 该元素用于将Action元素 ... -
Spring的DataAccessException略记
2013-07-08 19:23 2570Spring的DAO框架没有抛出 ... -
Result Type(Struts.xml配置)
2013-06-25 08:35 665一个提交到服务器的处理通常可以分为两个阶段: 第一个阶段查询服 ... -
ibatis常用标记略记
2013-06-23 21:12 1028isNull判断property字段是否是null,用isEm ... -
ibatis的iterate使用
2013-06-23 20:38 1133ibatis的iterate使用 Iterate:这属性遍历 ... -
spring入门之—第一步
2013-06-13 15:26 769注: 本文用的是spring-framework-3.1.1. ... -
Spring的ApplicationContext加载多个配置文件的三种方式
2013-06-13 15:09 18841.第一种,使用数组方式 ApplicationConte ... -
详解iBaits中SqlMapClientTemplate的使用
2013-06-05 16:07 0pache iBatis(现已迁至Google Code下发展 ... -
Struts2.0默认支持多种格式的result type
2013-06-05 16:00 916<action name="attachmen ... -
maven+ssi对oracle实现增删改查(二)
2013-06-05 12:06 12511.index.jsp访问项目默认页面 <%@ page ... -
maven+ssi对oracle实现增删改查(一)
2013-06-05 11:40 1272-. 1.Oracle10g 的表结构语句,需要内容的自己添加 ...
相关推荐
首先,我们需要创建一个Action类,通常继承自`ActionSupport`类或自定义的基类。Action类是业务逻辑的载体,它包含了处理用户请求的方法,例如登录验证。 ```java public class LoginAction extends ActionSupport...
在开发Java Web应用程序时,尤其是使用Struts2或者Spring MVC等MVC框架时,我们经常需要在多个Action之间进行跳转并传递参数。这在构建动态、交互性强的Web应用中是必不可少的。本项目旨在演示如何在自定义的Action...
Struts2通过值栈(ValueStack)管理请求范围内的数据,这使得开发者能够在控制器和视图之间传递数据变得非常简单。 ##### 1. 值栈(ValueStack) - **自动注入**: 当用户提交表单时,表单的数据会被自动填充到对应的...
在Struts2中,可以通过以下两种方式在超链接中传递参数: 1. **直接在URL中添加参数**: ```jsp <a href="newdetail2.action?nid=<s:property value="nid"/>"><s:property value="ntitle"/></a> ``` 这种方式...
在IT行业中,Fleemark和Struts是两个重要的概念,特别是在Web开发领域。Fleemark是一种将网页设计模块化的工具,而Struts则是一个基于MVC(Model-View-Controller)设计模式的Java Web框架。这里我们将深入探讨这两...
Struts2为每个请求创建一个新的Action实例,简化了线程安全问题。 3. **Servlet依赖**:Struts1的Action直接依赖于Servlet API,而Struts2的Action更加独立,减少了对底层Servlet容器的依赖,提高了可测试性和可移植...
- **Action的基本配置**:在Struts2框架中,`action`节点用于配置请求与处理类之间的映射关系。例如,一个简单的`action`配置可能如下所示: ```xml <action name="helloWorld" class=...