Struts2从另一个动作改变动作

时间:2011-12-30 09:58:08

标签: java struts2 struts

我想知道是否可以从另一个动作更改struts2动作的某些字段。例如,我有Class1 Action with field string1,我想从另一个动作Class2更改它。

public class Class1 extends ActionSupport{

    private String string1="old String";

}

public class Class2 extends ActionSupport{

    public String execute(){
        Class1 class1=new Class1();
        class1.setString1("new String");
    }

}

在struts1中,可以从会话中获取所有ActionForms。在struts2中,从没有更多动作形式的那一刻开始,它们就不再可用了。谢谢!

2 个答案:

答案 0 :(得分:3)

当请求与操作的操作映射匹配时,将创建Struts2操作实例。 每次都会创建新实例。

它们一直存在,直到请求处理结束,之后无法访问。

因此,您必须以某种方式将请求同时映射到两个动作,这是AFAIK不可能的,或者做一些与Struts2模型相反的诡计。

如果您需要将信息从一个动作传递到另一个动作,您有一些选择,即:

  • 将其放入会话
  • 将其放入数据库
  • 将其发回客户端并通过下一个请求重新发送到服务器。

答案 1 :(得分:0)

ScopedModelDriven interceptor and interface允许合理传真会话范围的动作形式(在模型级别或多或少相同)。

这实际上取决于你的用例 - 如果你正在尝试实现会话范围的动作表单,这就是这样做的方法。

如果您的目标更多是“为任意操作设置值”,ScopedModelDriven可能不是最佳方法。例如,我需要在任意操作(不是“表单向导”类型的东西)上设置值,并使用拦截器和注释,这样我就可以从多个源中提取数据并将其设置为各种非连续的操作。

本质上它是相同的技术,但包括其他非网络范围,并允许在设置的时间和内容方面有更多余地。