【问题标题】:An issue with storing Collections in struts http session attribute在 struts http session 属性中存储集合的问题
【发布时间】:2014-09-19 15:02:24
【问题描述】:

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

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

说在加载 index.jsp 时,下面的数据存储在 session 中

[{"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 和其他集合对象的表现如何?

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

【问题讨论】:

  • 真的很奇怪,你试过 Struts session map 吗?
  • @RomanC 甚至地图没有按预期工作:(

标签: jsp collections struts2 arrays httpsession


【解决方案1】:

第一个对象设置正确。

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

接下来调用Ajax函数时,数据属于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);
                   });
                 }
         });

【讨论】:

  • 对象是正确的,我知道在 ajax 响应中我们可以做到。但在 ajax 响应中,它有时会添加额外的引号,我必须删除它们。所以试图从会话中获取它
猜你喜欢
  • 2015-09-05
  • 2012-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
  • 1970-01-01
  • 2018-11-27
  • 1970-01-01
相关资源
最近更新 更多