Struts2 - 使用另一个会话对象作为键来检索会话对象

时间:2012-05-25 17:00:16

标签: java javascript jsp struts2

我是struts2的新手,我正在尝试使用动态会话密钥检索会话对象。

我的应用流程如下:用户将从浏览器中点击操作

http://localhost:8080/prjcr/pad.action?userid=p02585@test.org 

在action类中,我使用p02585@test.org请求参数从Web服务中检索值列表,并将它们存储在会话中,如下所示:

//get the request parameter
userid=ServletActionContext.getRequest().getParameter("userid);    
QDefn[] qDefn = proxy.getQDefns(userid); //webservice call   
List<QDefn> qdList = new ArrayList<QDefn>();   
qdList.add(Arrays.asList(qDefn));  

提取请求参数的userid部分以用作会话密钥

userid = userid.substring("UserId", userid.substring(0, userid.indexof('@'));   
//The key itself is what we receive in the request parameter  
ActionContext.getContext().getSession().put("UserId", userid);      

然后将关联的值列表推送到会话

ActionContext.getContext().getSession().put(userid, qdList);  

并转发到在选择下拉列表中显示此列表的JSP,如下所示:

<s:select name="qdefn" 
id="qdefn" 

list="#session.%{#session.UserId}"  ---What is the notation here??

listKey="defnName"
listValue="defnName"
headerKey="ALLQD"
headerValue="All" > </s:select>  

我尝试使用动态会话密钥(即userid)从jsp中的会话中提取qdList。 在java中,我们将其作为session.get(userid)。我还无法使用OGNL表示法。所以,我不知道如何在Struts2 / OGNL中做到这一点。

提前致谢

1 个答案:

答案 0 :(得分:0)

如果你做了

System.out.println(ActionContext.getContext().getSession().getClass());

在你的行动中,你会得到'class org.apache.struts2.dispatcher.SessionMap',但如果你做了

out.println(session.getClass());

在你的jsp中你会得到'class org.apache.catalina.session.StandardSessionFacade'之类的东西(我用的是tomcat)

所以试试

session.getAttribute(userid);

而不是

session.get(userid);