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



我在存储会话属性时遇到了一个奇怪的问题我将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中,当我点击next按钮时,我再次从服务器获取下一组详细信息,并且在struts操作中,我将再次将JSONArray设置为会话属性,如上述代码所示。

现在的数据将是不同的,在struts操作之前,在会话中设置它的细节如下

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

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

只是出于好奇,我试图设置一些字符串而不是jsonarray,然后我没有看到任何问题,所以我确认在设置或获取值时没有任何问题。

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

如何表现奇怪的JSONArray和其他集合对象?

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

第一个正确的对象集

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

下一个当你调用Ajax函数。数据属于ResponseData,这意味着你只能通过ResponseData.serverDetails获取数据。不能通过getAttribute实现。尽管你尽力了。它显然返回Old Data

Demo Check This Link.....

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

最新更新