2011-08-25 74 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>