我在存储会话属性时面临一个奇怪的问题 我将会话中的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和其他集合对象的行为如何?
另一件事是,在许多其他情况下它对我有用,只是在上面给出的情况下它不起作用。
答案 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);
});
}
});