JavaScript中session取值能否多次取用?

飞奔的三轮车 2017-04-07 04:17:28
这是服务器部分的代码

	req.getSession().setAttribute("pdata", lPersonDatas);
req.getSession().setAttribute("size", lPersonDatas.size());


其中pdata是从数据库取出来的,包含三个list,分别是username(String),value(int),date(date)

size是我用来记录list长度的整数。
然后是客户端的代码:

//document.write(${sessionScope.pdata[1].value});
for(var i =1 ;i<=${sessionScope.size};i++)
{
document.write(${sessionScope.pdata[i].value});
document.write("<p>aa</p>");
}

其中size的值应当是6,我发现确实显示了6行aa。
表明确实是完整进行了循环,可是结果中却并没有显示pdata中的数据。
注释掉的那一行document.write(${sessionScope.pdata[1].value});在没有注释时确实是可以显示出读取出来的数据的。
有哪位大神知道这个是怎么回事吗?
...全文
257 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞奔的三轮车 2017-04-07
  • 打赏
  • 举报
回复
引用 11 楼 jslang 的回复:
你能理解这句话吗 你要明白${}中的代码都是在服务器端执行的。 同一页面中的服务器端代码永远是先于客户端代码执行的,当客户端代码执行时${}中的代码都已经执行完了。 你可以在客户端浏览器中点右键选“查看网页源代码” 可以看到在这个源代码中所有的${xxxxxxxxxx}等服务器端的代码都已经没有了。都已经被替换成实际的返回值。 之后客户端代码就是在这个源代码的基础上执行的。
哦哦,明白了,多谢啦
天际的海浪 2017-04-07
  • 打赏
  • 举报
回复
你能理解这句话吗 你要明白${}中的代码都是在服务器端执行的。 同一页面中的服务器端代码永远是先于客户端代码执行的,当客户端代码执行时${}中的代码都已经执行完了。 你可以在客户端浏览器中点右键选“查看网页源代码” 可以看到在这个源代码中所有的${xxxxxxxxxx}等服务器端的代码都已经没有了。都已经被替换成实际的返回值。 之后客户端代码就是在这个源代码的基础上执行的。
飞奔的三轮车 2017-04-07
  • 打赏
  • 举报
回复
引用 9 楼 jslang 的回复:
[quote=引用 7 楼 qq_22163879 的回复:] [quote=引用 6 楼 qq_22163879 的回复:] [quote=引用 5 楼 jslang 的回复:] 你要明白${}中的代码都是在服务器端执行的。 同一页面中的服务器端代码永远是先于客户端代码执行的,当客户端代码执行时${}中的代码都已经执行完了。 也就是说${sessionScope.pdata[i].value}中的i只能是服务器端的变量,不能是客户端的变量。
可是

for(var i =1 ;i<=${sessionScope.size};i++)
{
document.write(${sessionScope.pdata[i].value});
}

document.write(${sessionScope.pdata[1].value};
document.write(${sessionScope.pdata[2].value});
document.write(${sessionScope.pdata[3].value});
document.write(${sessionScope.pdata[4].value});
document.write(${sessionScope.pdata[5].value});
document.write(${sessionScope.pdata[6].value});
在size=6的情况下 这样有什么区别吗?[/quote] 我少打了一个)[/quote] 你还是没理解 ${sessionScope.pdata[i].value}中的i只能是服务器端的变量,不能是客户端的变量。[/quote]

for(var i =0 ;i<6;i++)
{
document.write(${sessionScope.pdata[i].value});
document.write("<p>aa</p>"+i);
}
意思是这个i,在客户端的话必须是以静态方式存在的,而不能是客户端中生成的动态变量?
天际的海浪 2017-04-07
  • 打赏
  • 举报
回复
引用 7 楼 qq_22163879 的回复:
[quote=引用 6 楼 qq_22163879 的回复:] [quote=引用 5 楼 jslang 的回复:] 你要明白${}中的代码都是在服务器端执行的。 同一页面中的服务器端代码永远是先于客户端代码执行的,当客户端代码执行时${}中的代码都已经执行完了。 也就是说${sessionScope.pdata[i].value}中的i只能是服务器端的变量,不能是客户端的变量。
可是

for(var i =1 ;i<=${sessionScope.size};i++)
{
document.write(${sessionScope.pdata[i].value});
}

document.write(${sessionScope.pdata[1].value};
document.write(${sessionScope.pdata[2].value});
document.write(${sessionScope.pdata[3].value});
document.write(${sessionScope.pdata[4].value});
document.write(${sessionScope.pdata[5].value});
document.write(${sessionScope.pdata[6].value});
在size=6的情况下 这样有什么区别吗?[/quote] 我少打了一个)[/quote] 你还是没理解 ${sessionScope.pdata[i].value}中的i只能是服务器端的变量,不能是客户端的变量
天际的海浪 2017-04-07
  • 打赏
  • 举报
回复
你可以在服务器端循环输出成客户端的一个json对象,之后在客户端直接使用这个json对象

<script type="text/javascript">
var data = [];
<c:forEach items ="${sessionScope.pdata}" var= "item">
data.push({
	date:"${item.date}",
	value:"${item.value}"
});
</c:forEach>

for (var i = 0; i < data.length; i++) {
	document.write(data[i].value);
	document.write("<p>aa</p>");
}
</script>

飞奔的三轮车 2017-04-07
  • 打赏
  • 举报
回复
引用 6 楼 qq_22163879 的回复:
[quote=引用 5 楼 jslang 的回复:] 你要明白${}中的代码都是在服务器端执行的。 同一页面中的服务器端代码永远是先于客户端代码执行的,当客户端代码执行时${}中的代码都已经执行完了。 也就是说${sessionScope.pdata[i].value}中的i只能是服务器端的变量,不能是客户端的变量。
可是

for(var i =1 ;i<=${sessionScope.size};i++)
{
document.write(${sessionScope.pdata[i].value});
}

document.write(${sessionScope.pdata[1].value};
document.write(${sessionScope.pdata[2].value});
document.write(${sessionScope.pdata[3].value});
document.write(${sessionScope.pdata[4].value});
document.write(${sessionScope.pdata[5].value});
document.write(${sessionScope.pdata[6].value});
在size=6的情况下 这样有什么区别吗?[/quote] 我少打了一个)
飞奔的三轮车 2017-04-07
  • 打赏
  • 举报
回复
引用 5 楼 jslang 的回复:
你要明白${}中的代码都是在服务器端执行的。 同一页面中的服务器端代码永远是先于客户端代码执行的,当客户端代码执行时${}中的代码都已经执行完了。 也就是说${sessionScope.pdata[i].value}中的i只能是服务器端的变量,不能是客户端的变量。
可是

for(var i =1 ;i<=${sessionScope.size};i++)
{
document.write(${sessionScope.pdata[i].value});
}

document.write(${sessionScope.pdata[1].value};
document.write(${sessionScope.pdata[2].value});
document.write(${sessionScope.pdata[3].value});
document.write(${sessionScope.pdata[4].value});
document.write(${sessionScope.pdata[5].value});
document.write(${sessionScope.pdata[6].value});
在size=6的情况下 这样有什么区别吗?
天际的海浪 2017-04-07
  • 打赏
  • 举报
回复
你要明白${}中的代码都是在服务器端执行的。 同一页面中的服务器端代码永远是先于客户端代码执行的,当客户端代码执行时${}中的代码都已经执行完了。 也就是说${sessionScope.pdata[i].value}中的i只能是服务器端的变量,不能是客户端的变量。
飞奔的三轮车 2017-04-07
  • 打赏
  • 举报
回复
我再补充一下好了,现在我的目的是想要把从服务端的数据读取出来,用ichart展示成折线图的形式。
现在服务端传递过来的数据是从数据库读取出来的数据。也就是三个list。分别是String,int,date三种类型。
在客户端中,我通过foreach成功的读取出来,判断确实是成功了的,代码如下:
            <c:forEach items ="${sessionScope.pdata}" var= "item">   
<br>date:${item.date}</br>
<br> value:${item.value}</br>
<br>
formatdate<fmt:formatDate value="${item.date}" pattern="yyyy-MM-dd" />

</br>
</c:forEach >

显示结果如图


因为ichart是在JavaScript里面进行编写的,所以我需要在JavaScript里面取出session里面的数据。
所以我如主楼一样在JavaScript里面进行了取值。
现在的问题是在于,当我在JavaScript里面取值时,我可以静态取值到想取的值,比如
document.write(${sessionScope.pdata[1].value});

就可以取到具体值,可是当我用for循环试图将所有值取出时,却无法做到。
结果显示for循环正确运行了。
接下来我又把

document.write(${sessionScope.pdata[i].value});

更改为

document.write(“xx”+${sessionScope.pdata[i].value});

结果for循环就没有运行,也没有显示如我再2l所示的aa之类的输出。
ZeWe 2017-04-07
  • 打赏
  • 举报
回复
首先是你用el表达式读出你写入session域的size值,但是你放在session域里的pdata肯定有错误的,你需要建一个类对象,返回list类型的封装好你所需数据的对象。一定要加强get与set方法,不然在el表达式里.name什么的,拿不出数据的
天际的海浪 2017-04-07
  • 打赏
  • 举报
回复
你要获取的是服务器端的数据,要用服务器端的代码循环,不能在客户端循环。
飞奔的三轮车 2017-04-07
  • 打赏
  • 举报
回复

显示的结果是这样的

87,901

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧