2013-07-03 37 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> 

}