如何将Action类变量值传递给Struts 2中的另一个Action类

时间:2013-06-13 12:34:56

标签: java session parameters struts2

如何将Action类变量值传递给Struts 2中的另一个Action类?

我想在另一个动作类的查询变量中使用它。

3 个答案:

答案 0 :(得分:2)

这些操作可以通过不同的方式与不同的线程运行,并且不共享操作上下文。最常用的方法是使用请求或URL传递参数,XWork转换器将在OGNL的帮助下将它们转换为动作属性。

但我认为LoginAction的目的是通过凭据(email, username, password)对用户进行身份验证,并将此信息保存在会话映射中。它是可以在操作之间共享的公共资源。要使会话映射可用于操作和其他操作,他们应该实现SessionAware。它将帮助Struts将会话映射注入action属性。如果要在应用程序的许多操作中使用会话,那么在每个操作中都不能实现此接口,您可以创建基本操作。

public class BaseAction extends ActionSupport implements SessionAware {

  private Map<String, Object> session;

  public setSession(Map<String, Object> session){
    this.session = session;
  }

  public Map<String, Object> getSession(){
    return session;
  }
}

然后,操作将扩展基本操作以使会话更加合适。

public class LoginAction extends BaseAction {

  @Override
  public String execute() throws Exception {
    User user = getUserService().findBy(username, email, password);
    getSession().put("user", user);

    return SUCCESS;
  }

}

现在是会话中的用户,您可以从user地图中的其他操作或JSP和session对象获取会话。

public class InboxAction extends BaseAction {

  @Override
  public String execute() throws Exception {
    User user = (User) getSession().get("user");

    return SUCCESS;
  }

} 

答案 1 :(得分:0)

尝试此操作:在第一个操作中使用结果类型chain

并将第二个操作的名称作为值添加到第一个操作的结果

链接指向链结果的struts2的官方页面

答案 2 :(得分:0)

如果您想将所有值发布到其他操作,请使用&#39;链接&#39;,否则请使用redirect-action并指定参数。