将集合存储在struts http会话属性中的问题

时间:2014-07-28 12:12:24

标签: jsp collections struts2 arrays httpsession

我在存储会话属性时面临一个奇怪的问题 我将会话中的JSONArray存储为字符串

JSONArray serverDetails = jsonResponse
                        .getJSONArray("details"); //server returns details in json format   
ServletActionContext.getRequest().getSession().setAttribute("serverDetails", serverDetails.toString());

假设在加载index.jsp时,以下数据存储在会话

[{"id":"10","si":"1000","ti":"300"},{"id":"40","si":"2000","ti":"400"}]

然后在jsp中,当我点击下一个按钮时,我再次从服务器获取下一组细节,在struts操作中,我将再次将JSONArray设置为session属性,如上面的代码所示。

现在数据会有所不同,并且在struts操作中将其设置为会话之前的详细信息如下所示

 [{"id":"100","si":"500","ti":"600"},{"id":"1040","si":"250","ti":"70"}]

在ajax成功块中,我将尝试使用jsp中的getAttribute获取相同的细节,但奇怪的是getAttribute返回旧的值而不是更新的值(注意新的将在操作方法中正确设置)

只是为了好奇我尝试设置除了jsonarray之外的其他字符串,然后我没有看到任何问题,所以我确认设置或获取值时没有任何错误。

然后我尝试存储ArrayList值而不是JSONArray,这也是同样的问题。

JSONArray和其他集合对象的行为如何?

另一件事是,在许多其他情况下它对我有用,只是在上面给出的情况下它不起作用。

1 个答案:

答案 0 :(得分:0)

正确设置第一个对象。

"serverDetails" :[{"id":"10","si":"1000","ti":"300"},{"id":"40","si":"2000","ti":"400"}]

接下来当您调用Ajax Function时。该数据属于ResponseData,这意味着您只能通过ResponseData.serverDetails获取数据。不能通过getAttribute实现。偶 - 虽然你试过。显然返回Old Data

Demo检查此链接.....

   $.ajax({
      type: "GET",
      url: "Strutsaction",
      dataType: "JSON",
     success:function(ResponseData){
                  $.each(ResponseData.serverDetails,function(i,v){
                         alert(i+""+v);
                   });
                 }
         });