Struts2将动作Bean从一个动作传递到类型链中的其他动作

时间:2015-08-05 06:38:22

标签: struts2

我有两个Struts2动作,并且两个动作都被链接,因此流程顺序为    action1 ---> action2 ---> display.jsp

    class Action1 extends ActionSupport
    {


      public String display()
      {
         Student stud = new Student();
         stud.setName("I am from Action1");

         //what should be done here so that I can get stud in another action via chain   
         return "success";

      }


    }

   class Action2 extends ActionSupport
    {
      private Student stud;
      //getter/setter

      public String display()
      {
         Sting name = stud.getName();//getting NULL here
         return "success";

      }


    }

我想通过链将stud对象从一个动作传递到另一个动作。  我的strut2.xml设置如下

<action name="action1" class="com.internet.Action1" method="display">
    <result name="success" type="chain">action2</result>
 </action>

  action name="action2" class="com.internet.Action2" method="display">
    <result name="success" type="tiles">MyDiplayPage</result>
 </action>

我在3.0春季工作过,我对struts2感到不舒服,并试图获得舒适感......请帮我解决问题。

1 个答案:

答案 0 :(得分:1)

也许Chaining Interceptor就是您looking for

  

如果您需要复制之前的操作中的属性   链到当前动作,你应该应用链接   拦截器。拦截器将复制原始参数   请求,并将ValueStack传递给目标Action。该   源操作由ValueStack记住,允许目标   使用。访问前面Action的属性的操作   ValueStack,并使这些属性可用于最终   链的结果,例如JSP或Velocity页面。

您可以从Value Stack访问您想要的任何内容。只需将你想要的Bean从一个Action推送到它的Value Stack:

Map<String, Object> myValues = new HashMap<String, Object>();
myValues.put("key", myBean);
ActionContext.getContext().getValueStack().push(myValues);

传递一些值是可以的,但要注意过度需要将信息从一个动作传递到另一个动作,这可能是你需要重新思考动作范围的症状:

  

所有核心逻辑都应该被推回支持类或者   业务门面,使Actions只调用方法。行动是最好的   用作适配器,而不是编码逻辑的类   定义