2010-09-22 37 views
1
javascript變量

我的代碼是這樣的:使用JSP

<% 
ArrayList<Item> itemList = new ArrayList<Item>(); 
itemList = projr.getObjects(projectID); 
if (itemList.size() != 0) { 
%> 

<script type="text/javascript"> 
window.onload = function() { 
for(var i = 0;i < <%=itemList.size()%>;i++){ 
    var azimuth=0; 
    azimuth = <%=itemList.get(i).getAzimuth()%>; 
</script> 

<% 
} 
%> 

基本上你可以看到,由於某些原因,我需要爲在JavaScript中循環做。但是,我無法在jsp <%=%>標記中使用javascript中聲明的變量「i」。因此,我想知道是否可以解決任何問題。

我試圖將「我」作爲一個cookie,並嘗試通過做像水木清華找回它在jsp:

azimuth = <%=itemList.get(Integer.parseInt((request.getCookies())[0].getValue())).getAzimuth()%>; 

然而,可悲的是,這並不工作。此外,我想使用隱藏的輸入字段來存儲'我',但我不認爲它會工作,即使做了一個request.getParameter(輸入名稱),我不會得到任何東西,因爲我還沒有提交任何東西。我說得對嗎?

我將不勝感激如果你們好心人能幫助我在這裏=]

+1

只是爲了確保:你知道JSP是在服務器上執行,其生成HTML(+ JS),然後客戶端上的解釋?我的方式是將該列表序列化爲JSON並將其轉儲到JavaScript塊中。 – ZeissS 2010-09-22 13:10:39

+0

你的數組列表會更好,如果你這樣分配它: List itemList new ArrayList <>(); 只是一個想法=) – njfife 2013-10-16 19:59:52

回答

2

你應該在JSP/Java的,而不是在JavaScript執行的循環。

<% 
ArrayList<Item> itemList = new ArrayList<Item>(); 
itemList = projr.getObjects(projectID); 
if (itemList.size() != 0) { 
%> 

<script type="text/javascript"> 
window.onload = function() { 
    <% 
    for(int i = 0; i itemList.size(); i++) { 
    %> 
    var azimuth=0; 
    azimuth = <%= itemList.get(i).getAzimuth()%>; // Note: this will overwrite the original value on every loop. Not sure what you want, I've just make the code to work. 
    <% 
    } 
    %> 
</script> 

<% 
} 
%> 

這就是說,使用的scriptletextremely poor practice。我建議看看JSTL/EL或最終Ajax + JSON。

這裏有一個JSTL/EL有針對性的例子:再次

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 

<c:if test="${not empty itemList}"> 
    <script> 
     window.onload = function() { 
      <c:forEach items="${itemList}" var="item"> 
       var azimuth = 0; 
       azimuth = ${item.azimuth}; 
      </c:forEach> 
     } 
    </script> 
</c:if> 

,你在每次迭代覆蓋azimuth,但你也做,在原來的問題,所以你可能知道你的」重新做。我是在想。

0

這個什麼:

<% 
ArrayList<Item> itemList = new ArrayList<Item>(); 
itemList = projr.getObjects(projectID); 
if (itemList.size() != 0) { 
%> 

<script type="text/javascript"> 
window.onload = function() { 
<%for(Item i : itemList){%> 
    var azimuth=0; 
    azimuth = <%=i.getAzimuth()%>; 
<%}%> 
</script> 

<% 
} 
%>