Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Struts 2中将Action类变量值传递给另一个Action类_Java_Session_Parameters_Struts2 - Fatal编程技术网

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

Java 如何在Struts 2中将Action类变量值传递给另一个Action类,java,session,parameters,struts2,Java,Session,Parameters,Struts2,如何将Action类变量值传递到Struts 2中的另一个Action类中 我想在另一个操作类中使用查询变量中检索到的值。尝试以下操作:在第一个操作中使用结果类型 并将第二个操作的名称作为值添加到第一个操作的结果中 链接指向struts2的官方页面以获取链结果操作可以通过不同的方式相互通信,它们运行在不同的线程中,并且不共享操作上下文。最常用的方法是通过请求或URL传递参数,XWork转换器将在OGNL的帮助下将其转换为操作属性 但是我认为登录操作的目的是通过用户的凭据(电子邮件、用户名、密码)

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


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

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

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


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

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

但是我认为
登录操作的目的是通过用户的凭据
(电子邮件、用户名、密码)
对用户进行身份验证,并将此信息保存在会话映射中。这是一个可以在操作之间共享的公共资源。要使会话映射可用于操作和其他操作,它们应该实现
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;
  }
}
现在,用户在会话中,您可以从其他操作或JSP获取会话,并从
会话
映射获取
用户
对象

public class InboxAction extends BaseAction {

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

    return SUCCESS;
  }

} 

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

我希望在Struts2中使用该选项,用例是什么?你是如何将这两个动作联系起来的?@Dave Newton我不知道用例。我在LoginAction类中声明了三个参数,并通过jsp页面输入了这三个参数的值。现在我想在ToInboxAction类中检索三个值中的一个。如果需要,我也可以发布我的代码。@用户为什么不将第一个操作的结果传递给他们?为什么直接在另一个操作中实例化一个操作?这不是一个好主意有多种原因。如何将其放入另一个action类?@user或可能是更好的答案?getUserService()方法不起作用。我们需要进口什么包裹吗?。
public class InboxAction extends BaseAction {

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

    return SUCCESS;
  }

}