簡體   English   中英

Struts2從另一個動作改變動作

[英]Struts2 change action from another action

我想知道是否有可能從另一個動作中更改一個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中,從沒有更多操作表單的那一刻起,它們就不再在會話中可用。 謝謝!

當請求與操作的操作映射匹配時,將創建Struts2操作實例。 每次都會創建新實例。

它們一直存在,直到請求處理結束,之后無法訪問。

因此,你必須以某種方式將請求同時映射到兩個動作,這是AFAIK不可能的,或者做一些與Struts2模型相反的詭計。

如果您需要將信息從一個動作傳遞到另一個動作,則有一些選擇,即:

  • 把它放在會議中
  • 把它放在數據庫中
  • 將其發送回客戶端並使用下一個請求重新發送到服務器。

ScopedModelDriven攔截器和接口允許合理地傳真會話范圍的動作形式(在模型級別或多或少相同)。

這實際上取決於你的用例 - 如果你正在嘗試實現會話范圍的動作表單,這就是這樣做的方法。

如果您的目標更多是“為任意操作設置值”, ScopedModelDriven可能不是最好的方法。 例如,我需要在任意操作(不是“表單向導”類型的東西)上設置值,並使用攔截器和注釋,這樣我就可以從多個源中提取數據並將其設置為各種非連續的操作。

本質上它是相同的技術,但包括其他非Web范圍,並允許在設置什么時,以及什么方面更多的余地。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM