-2

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

我想在另一个动作类中使用在查询变量中检索到的那个。

4

3 回答 3

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;
  }

}

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

public class InboxAction extends BaseAction {

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

    return SUCCESS;
  }

} 
于 2013-06-14T11:49:47.613 回答
0

试试这个:在第一个动作中使用结果类型链。

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

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

于 2013-06-13T20:22:48.810 回答
0

如果要将所有值发布到另一个操作,请使用“链”,否则请使用重定向操作并指定参数。

于 2016-08-03T05:02:22.497 回答