2014-01-15 39 views
2

在我的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); 
} 

但是,当我执行代码中的错误说法,未知的变数“我”是内

var pageNames = '<%=session.getAttribute("pageNames["+i+"]")%>'; 

dispalyed怎么会是这种可能的时候我已经在for循环与定义“变种I”写呢? 任何人都可以告诉我如何访问存储为'pageNames [0],pageNames [1],pageNames [2] .......'从我的JavaScript存储会话变量? 在此先感谢。

回答

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> 

不管怎么说,更好的办法是页面名称的整个列表存储到会话,并遍历存储列表。

3

我不能评论你的文章,因为低名誉,因此我写这个。

会话用于在服务器上存储用户相关数据,以便我们的服务器可以记住用户。 JSP是客户端,因此会话将不可用。

为什么不使用request.setAttribute在java页面中并使用request.getAttribute方法在JSP上访问它。