2014-10-20 44 views
0

我需要將用戶名變量存儲到會話中。在Struts2的會話映射中插入一個變量

Map<String, Object> sessionname; 
String uname="SomeValue"; 
    public void setSession(Map map) { 

    sessionname=ActionContext.getContext().getSession(); 
    sessionname.put("uname", username);//inserting String to the session variable 

} 

在另一個操作頁面上,如果我將這個值返回給一個字符串,那麼它顯示爲空。如果我在雙引號中給出字符串,而不是給出字符串,它將進入操作頁面。

String l=(String)session.getAttribute("uname"); 
System.out.println(l); //gives the value as null 

如果它是不可能的給我另一種解決方案來傳遞一個特定的變量到其他頁面。我正在開發一個使用struts的圖像共享應用程序。爲了上傳圖片,我需要將用戶名稱傳遞給與圖片上傳過程相對應的操作頁面。

回答

0

不要重新發明輪子。

Struts2已經使用了一個SessionMap包裝器對象among the others

只需實現SessionAware接口,併爲您的對象提供setter;然後把和檢索從地圖你的對象,它將會由您所有執行SessionAware接口動作被自動處理:

public class FirstAction implements SessionAware { 

    private Map<String,Object> session; 
    public void setSession(Map<String,Object> session){ 
     this.session = session; 
    } 

    private String username; /* with Getter and Setter */ 

    public String execute(){ 
     session.put("uname", username); 
     return SUCCESS; 
    } 
} 

public class SecondAction implements SessionAware { 

    private Map<String,Object> session; 
    public void setSession(Map<String,Object> session){ 
     this.session = session; 
    } 

    public String execute(){ 
     System.out.println(session.get("uname")); 
     return SUCCESS; 
    } 
} 

這就是說,它會更好,只是從實現SessionAware父行動,以避免冗餘,並從需要訪問會話映射的所有操作中擴展該操作。

+0

它適用於我.. – 2014-10-21 03:31:13

+0

好。然後請記得接受答案 – 2014-10-21 07:50:38

+0

對不起,我接受了。我是新來的,這就是爲什麼.. :)。 – 2014-10-21 11:19:55