2014-10-20 31 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