2013-07-03 35 views
9

在我的Java代码中,我有一个ArrayListString s。我想将这些数据放在我正在处理的JSP页面上的JavaScript变量中。我首先想到的是直接包含它,例如:将字符串的Java ArrayList转换为JavaScript数组

var myArray = <%= arrayList %>; 

不幸的是,在执行时,myArray格式为[a,b,c]一个字符串,而不是一个实际的JavaScript数组。我如何从Java ArrayList获取一些数据到JavaScript数组?

+0

请用示例数据添加更多代码 – sabithpocker

回答

4

当您使用<%=arraylist%>它调用toString()名录,并打印[a,b,c]

也没有,你不能照片直接从Java arrayList转换为JavaScript数组,转换了Java ArrayListJSON String,并使用JSON.parse()获取JavaScript object

看一看Json objetJson in java

+0

感谢哥们。我有像[a,b,c]一样的json字符串。当我使用Json.parse(aa);它显示错误。未捕获的引用error.a未定义。所以它必须像[“a”,“b”,“c”]。那么如何转换呢? – Jack

+0

老兄,你必须添加json库到你的类路径并将你的arraylist在服务器端转换为json字符串并发送给客户端。然后JSON.parse()工作:) –

+0

答案中的第二个链接不再可用。 – Knu8

1

试试这个方法:

var myArray = <%=net.sf.json.JSONSerializer.toJSON(arrayList) %>; 
13

Withoug库:

的Java:

public static String toJavascriptArray(String[] arr){ 
    StringBuffer sb = new StringBuffer(); 
    sb.append("["); 
    for(int i=0; i<arr.length; i++){ 
     sb.append("\"").append(arr[i]).append("\""); 
     if(i+1 < arr.length){ 
      sb.append(","); 
     } 
    } 
    sb.append("]"); 
    return sb.toString(); 
} 

JSP:

var myArray = <%= toJavascriptArray(arrayList) %>; 
+0

谢谢老兄。我期望这样只... – Jack

+0

技术是好的,但你仍然需要解析它到JSON,而分配给JavaScript变量。 –

+0

这对我有用! –

3

不要在你的JSP页面

<% List<String> strList = new ArrayList<String>(); 
strList.add("one"); 
strList.add("two"); 
strList.add("three"); %> 

var jsArray = [<% for (int i = 0; i < strList.size(); i++) { %>"<%= strList.get(i) %>"<%= i + 1 < strList.size() ? ",":"" %><% } %>]; 

以下的输出将是

var jsArray = ["one","two","three"]; 

如果列表是空的,将输出

var jsArray = []; 
1

的JavaScript split()方法返回一个数组,因为我们知道,所以它将javaArrayList转换为jav的最简单方法ascript数组。这对我来说可以。

function toJavascript(){ 
      &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; var array="<%=javaArrayList%>";<br> 
      &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; array=array.replace("[", "");<br> 
      &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; array=array.replace("]", "");<br> 
      &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return javaArray.split(",");<br> 

}