如何访问存储为数组的会话名称?

时间:2014-01-15 04:57:43

标签: javascript jsp session java-ee servlets

在我的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] .......'的会话变量? 提前谢谢。

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>

无论如何,更好的方法是将整个页面名称列表存储到会话中并迭代存储列表。