2011-08-25 143 views
2
<% 
    //Retrieving the Server list from dispatcher 
    Collection<Server> svr = (Collection<Server>)request.getAttribute("stuff"); 

    ArrayList<String> serverIds = new ArrayList<String>(); 

    for(Server i : svr) 
     serverIds.add(i.getId()); 

    String [] svrIds = new String[svr.size()]; 
    serverIds.toArray(svrIds); 

%> 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<script type="text/javascript"> 

    var instanceIds = new Array(<%=svrIds%>); 

    //test somethings in there 
    alert(instanceIds[0]); 


</script> 
</head> 
</html> 
+0

可能重複(http://stackoverflow.com/questions/17440164/converting-a-java-arraylist-of-strings-to-a- javascript-array) –

回答

2

如果你想使用Java代碼編寫代碼爲JavaScript數據結構,大概要做到這一點是最簡單的方法爲Java使用JSON庫。 JSON字符串可以解釋爲Javascript代碼。

http://code.google.com/p/json-simple/wiki/EncodingExamples

在代碼中,你應該能夠做這樣的事情:

如果你想使用JSON.simple,那麼這裏的如何產生JSON字符串的例子

var instanceIds = <%= JSONValue.toJSONString(serverIds) %> 

您不應該需要將ArrayList轉換爲Java數組。請注意,此功能對您傳入的類型非常敏感;在這種情況下數組實際上不起作用。

另外,爲此,您需要安裝JSON.simple JAR文件並在您的JSP中導入org.json.simple.JSONValue

+0

你能舉一個簡單的例子來反對我的代碼嗎?非常感謝 – stackoverflow

+0

已添加。我無法像你那樣在一個JSP設置中測試它,但是我在'ArrayList '上測試了這個函數,並且它按照預期生成了一個JSON數組。 –

0

我想說,你必須使用svrIds的JavaScript兼容的字符串表示形式,如String srvIdsString = "\"element1\",\"element2\"";。爲了達到這個目的,迭代數組並將"\"" + svrIds[i] + "\","附加到字符串表示中。

請注意,最後一個逗號應該再次移除或根本不添加(例如,跳過最後一個元素或將其添加到前面並跳過第一個元素)。

例子:

StringBuilder idArrayBuilder = new StringBuilder(); 
for(String id : srvIds) { 
    if(idArrayBuilder.length() > 0) { 
    idArrayBuilder.append(","); 
    } 

    idArrayBuilder.append("\"").append(id).append("\""); 
} 
String result = idArrayBuilder.toString(); 

剩下的就是給你:)

+0

你會舉一個這樣的例子嗎? – stackoverflow

0

Thomas和Nates的答案都很好。但是,另一種方法是將每個代碼寫入隱藏字段,然後讓您的js在DOM中查看它們。 [將字符串轉換的一個Java的ArrayList到JavaScript數組]的

1
<% 
    String[] jArray= new String[2]; 
    jArray[0]="a"; 
    jArray[1]="b"; 

    StringBuilder sb = new StringBuilder(); 
    for(int i=0;i<jArray.length;i++) 
     sb.append(jArray[i]+","); 
%> 

<script type="text/javascript"> 
    temp="<%=sb.toString()%>"; 
    var strr = new Array(); 
    strr = temp.split(',','<%=jArray.length%>'); 

    alert("array: "+strr); 
</script>