我想知道是否可以从另一个动作更改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中,从没有更多动作形式的那一刻开始,它们就不再可用了。谢谢!
答案 0 :(得分:3)
当请求与操作的操作映射匹配时,将创建Struts2操作实例。 每次都会创建新实例。
它们一直存在,直到请求处理结束,之后无法访问。
因此,您必须以某种方式将请求同时映射到两个动作,这是AFAIK不可能的,或者做一些与Struts2模型相反的诡计。
如果您需要将信息从一个动作传递到另一个动作,您有一些选择,即:
答案 1 :(得分:0)
ScopedModelDriven
interceptor and interface允许合理传真会话范围的动作形式(在模型级别或多或少相同)。
这实际上取决于你的用例 - 如果你正在尝试实现会话范围的动作表单,这就是这样做的方法。
如果您的目标更多是“为任意操作设置值”,ScopedModelDriven
可能不是最佳方法。例如,我需要在任意操作(不是“表单向导”类型的东西)上设置值,并使用拦截器和注释,这样我就可以从多个源中提取数据并将其设置为各种非连续的操作。
本质上它是相同的技术,但包括其他非网络范围,并允许在设置的时间和内容方面有更多余地。