2014-01-15 37 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上訪問它。