在我的servlet中,我存储了会话变量,如下所示,
for(int i=0;i>pageNames.length;i++) {
session.setAttribute("pageNames["+i+"]",pageNames[i]);
}
现在从JSP页面我创建了一个javascript函数,如下所示,
for(var i=0;i<10;i++) {
var pageNames = '<%=session.getAttribute("pageNames["+i+"]")%>';
alert(pageNames);
}
但是当我执行代码时出现错误,未知变量'i'在
中被显示出来var pageNames = '<%=session.getAttribute("pageNames["+i+"]")%>';
当我在for循环中用'var i'定义它时,怎么可能这样呢? 谁能告诉我如何从我的javascript访问存储为'pageNames [0],pageNames [1],pageNames [2] .......'的会话变量? 提前谢谢。
答案 0 :(得分:4)
由于声誉低,我无法对你的帖子发表评论,因此我写这篇文章。
会话用于在服务器上存储用户相关数据,以便我们的服务器可以记住用户。 JSP是客户端,因此会话将不可用。
为什么不在java页面中使用request.setAttribute并使用request.getAttribute方法在JSP上访问它。
答案 1 :(得分:3)
你正在混合两个世界 - javascript和jsp。带有javascript代码的JSP必须首先转换为java servlet。但是java servlet并不知道javascript循环。在可以识别javascript之前解释JSP,因此您不能使用循环变量i
。
我的建议是首先从JSP准备一组页面名称,然后在javascript中迭代它。这就像是:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<script>
var pageNames = new Array(
<c:forEach var="i" begin="1" end="10" varStatus="status">
<c:set var="pageIndex">pageNames[${i}]</c:forEach>
"${sessionScope[pageIndex]}"
<c:if test="${!status.last}" >, </c:if>
</c:forEach>);
for(var i=0;i<pageNames.length;i++) {
alert(pageNames[i]);
}
</script>
无论如何,更好的方法是将整个页面名称列表存储到会话中并迭代存储列表。