struts2 中如何在action之间传递对象。。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts2 中如何在action之间传递对象。。相关的知识,希望对你有一定的参考价值。

有两个action , FirstAction 需要传递一个叫 user 的对象给SecondAction 。 SecondAction中有多个方法需要用到user 对象。 不知道怎么做, 望各位大牛指导一下。

struts2使用chain的方式会保留请求参数
<action name="addCommentPro" class="addCommentAction">
  <interceptor-ref name="authorityStack"/>
   <result type="chain">viewCommentPro</result>
</action>

当使用redirectAction时,会发生重定向,参数会丢失,可以使用以下两种方式传递参数,两种方法下目标Action都必须有对应属性的getter,setter方法
param方式:

<action name="addCommentPro" class="addCommentAction">
<interceptor-ref name="authorityStack"></interceptor-ref>
<result type="redirectAction">
<param name="actionName">viewCommentPro</param>
<param name="aid">$aid</param>
</result>
</action>

直接传递:
<action name="addCommentPro" class="addCommentAction">
<interceptor-ref name="authorityStack"></interceptor-ref>
<result type="redirectAction">viewCommentPro?aid=$aid</result>
</action>
从上面看出,在struts.xml里调用OGNL表达式并不是使用%而是使用$,这和EL表达式在JSP页面中的用法一样。
参考技术A 有几种解决方案,我认为最好用的是,建立一个Action父类,在里面定义一个map,把想要的数据存在map里,然后其他需要数据的类去继承这个Action父类 参考技术B 两种存储到session的方法:(也可存储到request)
ServletActionContext.getRequest().getSession().setAttribute("AZ", message);
ActionContext.getContext().getSession().put("BY", info);本回答被提问者采纳
参考技术C <result name="TurnTOSecondAction " type="chain">这种结果集是指用请求转发的形式跳转到action action中的变量都会传递到下一个action 参考技术D 在struct的配置文件里用chain去配置跳转,在跳转前将Use对象存到request里面,在SecondAction里面去取
<action name="FirstAction" class="com.*.FirstAction">
<result name="TurnTOSecondAction " type="chain">
<param name="actionName">SecondAction</param>
</result>
</action>
<action name="SecondAction" .......>
.....................
</action>

struts2框架-----Action

 

控制器Action

Action对象是struts2框架的核心,每个URL映射到特定的Action,其提供处理来自用户的请求所需要的处理逻辑。Action有两个重要的功能,即将数据从请求传递到视图和协助框架确定哪个结果应该是呈现在响应请求中的视图中。

一、Action接口

Action是com.opensymphony.xwork2包中的一个接口,提供了5个静态的成员变量,是struts2框架中为处理结果定义的静态变量。

Action接口的静态变量:

 

ActionSupport类实现了Action接口,在Struts2框架中创建的控制器类一般继承该类。struts2框架中的action必须有一个无无参数并且返回值是String或Result对象的方法。

二、属性注入值

在struts2框架中,用户提交的表单信息会自动注入到与Action对象相对应的属性中。注入属性值到Action对象中,在Action类中必须提供属性的setter方法,这是由于struts2框架是按照JavaBean规范中提供的setter方法,自动为属性注入值。

 

下边通过一个案例阐释:通过struts框架,将用户提交的信息注入到Action对象对应的属性中

step1:创建继承ActionSupport的类,并定义一个属性,通过struts2框架对该属性注入值(源码\\struts2\\src\\action\\paramAction.java)

步骤一中,定义私有成员变量param,其名称与用户提交请求页面中参数的名称一致,以便于使用getParam()方法获取用户输入的数据。重写execute()方法,在该方法中获取Map类型变量session的值,通过session保存用户提交的数据。通过if语句判断,当param值为空字符串或null时,返回failed字符串,否则返回success字符串。

step2:创建输入参数信息的页面(源码\\struts\\webRoot\\index.jsp)

步骤二中,显示需要用户输入的信息。当点击参数时,将用户请求交由Action对象处理。由于struts框架指定了后缀为.action,所以在这里表单中action属性值加上.action,否则报错。

step3:在配置文件struts.xml中配置Action对象

步骤三中,通过<action>标签的name属性指定被请求的URL映射地址,当Action处理完成返回success字符串时,根据映射关系交由index.jsp页面显示数据信息。

 

以上是关于struts2 中如何在action之间传递对象。。的主要内容,如果未能解决你的问题,请参考以下文章

struts2怎么向jsp传递参数

Struts2---将页面表单中的数据提交给Action

JAVA 前端传递二维数组参数 struts2 action如何接收

struts2框架-----Action

struts2中redirect action的参数传递

struts2如何实现弹出action返回的错误信息。