2014-01-14 51 views
0

我在我在其中如下已經存儲了會話範圍內的陣列小服務程序,如何從javascript中訪問存儲在會話中的數組變量?

session.setAttribute("pageNames",pageNames); 

現在此Servlet的控制研究轉移到其調用函數「GETPAGE()」,而加載的JSP頁如下,

<body id="qwer" onload="getPage('<%=(String[])session.getAttribute("pageNames")%>'> 

關於 'GETPAGE()' 是如下的JavaScript代碼,

function getPage(pageNamesArray) 
       { 
        var ele = document.getElementById('app'); 

        for(var i=0;i<10;i++) 
        { 
         var imageLabel = document.createElement("label"); 
         imageLabel.innerHTML = pageNamesArray[i]; 
         ele.appendChild(imageLabel); 
        } 
       } 

我期望我會得到從「頁面名稱」陣列的前10個值,我已經存儲在會話,而是我'得到以下輸出的名稱,

[Ljava.lang.String; @ 17a8undefinedundefinedundefined

我測試的代碼在我的servlet中,發現數組'pageNames'填充了40多個值。

任何人都可以建議我做從 JSP頁面內打印陣列名字將會值是什麼? 在此先感謝。

+0

JSP是一種服務器端技術。它呈現作爲HTTP響應主體發送的HTML。 Javascript是一種客戶端技術,通常在瀏覽器中執行HTML中包含的腳本。 –

+0

@SotiriosDelimanolis所以如何從jsp頁面訪問數組? –

+1

您將不得不將數組的內容序列化爲可以用javascript(可能爲JSON)表示和解析的格式。 –

回答

2

你的做法是正確的,但,這不是你如何打印數組中的元素。您必須遍歷數組並輸出組件。

爲了保持乾淨,你可以創建另一個JavaScript類的函數:

function getPageNames() { 
    var pageNamesArray = [ 
    <c:forEach var="p" items="${sessionScope.pageNames}" varStatus="status"> 
    ${status.first ? '' : ','} "${p}" 
    </c:forEach> 
    ]; 

    return pageNamesArray; 
} 

則有:

<body id="qwer" onload="getPage(getPageNames())"> 

什麼我上面做的是創建一個Javascript數組與頁面名稱,與輸出如下:

function getPageNames() { 
    var pageNamesArray = [ 
    "page1" 
    ,"page2" 
    ,"etc" 
    ]; 

    return pageNamesArray; 
} 

我使用JSTL爲那,但你也可以使用scriptlet。這個想法是循環訪問數組。

+0

嘿感謝您的回答,但是當我粘貼您的代碼似乎沒有什麼打印。我使用'alert()'檢查了'getPageNames()'和'getPage()'函數從不被調用。我寫了我的getPage()函數,如下所示,函數getPage(pageNamesArray){.......} –

+0

我評論了所有代碼,並且只在這兩個函數中保留了'alert()',並且現在顯示了alert() 。 –

+0

實際上我採用了一種新的方法,我沒有使用JavaScript,所以我在我的JSP代碼中使用'pageNames'數組來獲得所需的結果。但是,非常感謝您的幫助,我瞭解到我們可以通過您在函數fun fun1(fun2())中包含一個函數。 –