2013-11-20 33 views
1

我有一個用戶定義的對象數組,我從一個servlet傳遞給一個JSP。現在,我需要在我的JSP腳本標記中訪問這個數組。我該怎麼做?如何訪問JSP中的<script>中的用戶定義對象數組?

現在,我已經在腳本標記中以下內容:

var dCount = '${chart}'; 

var index; 
    for(index=0; index<dCount.length;index++){ 
     alert(dCount); 
    } 

當我這樣做,我得到的輸出爲未定義。我認爲這是因爲${chart}返回一個Object?如果是這樣,我該如何將其轉換爲我的用戶定義類?或者是其他問題呢?

謝謝。

回答

0

您需要認識到JSP基本上是一個HTML代碼生成器,並且CSS/JS是生成的HTML輸出的一部分。您需要以生成有效的HTML/JS代碼的方式編寫JSP代碼。 3個對象,每個屬性foobar看起來像這樣的一個有效的JS數組:

var chart = [{ 
    foo: "foo1", 
    bar: "bar1" 
},{ 
    foo: "foo2", 
    bar: "bar2" 
},{ 
    foo: "foo3", 
    bar: "bar3" 
}]; 

var index; 
for(index = 0; index < chart.length; index++) { 
    var item = chart[index]; 
    alert(item.foo + ", " + item.bar); 
} 

現在,你需要確保你寫這樣的方式JSP代碼正是這種有效的HTML/JS代碼(可以通過在瀏覽器中右鍵單擊和查看源代碼進行驗證)。

只要${chart}List<Item>Item[],最幼稚方式之一在它使用<c:forEach>循環,打印所需的JS代碼輸出:

var chart = [<c:forEach items="${chart}" var="item" varStatus="loop"> 
    { foo: "${item.foo}", bar: "${item.bar}" }${loop.last ? '' : ','} 
</c:forEach>]; 

在其最簡單的形式,但是應該很好地工作。但是,一旦您將「特殊字符」作爲屬性值(例如"甚至換行符),麻煩就會開始。你需要逃避它。更好的方法是使用現有的JSON library(如Google Gson),以便將複雜的Java對象(如List<Item>Item[])轉換爲有效的JSON字符串。例如。如在servlet如下:

List<Item> chart = createItSomehow(); 
request.setAttribute("chart", new Gson().toJson(chart)); 
// ... 

然後,你可以這樣做:

var chart = ${chart}; 
+0

嗯,但如果我轉換對象成JSON字符串數組,我怎麼會調用該對象的距離的方法腳本?例如,我需要調用一個方法,如:dCount.getCount();或dCount.getName()。 – drunkenfist

+0

正如我的答案中所示,通過'item.count','item.name'等等通常的JS對象方式。 – BalusC

+0

感謝BalusC,工作就像一個魅力。我只需要添加var chart = JSON.parse('$ {chart}'); – drunkenfist

0

Java腳本在客戶端執行,el在服務器端進行評估。我認爲可以交替地在java腳本中向服務器發出ajax請求,並且可以返回用戶列表作爲字符串,在java腳本中只能使用字符串而不是任何其他數據類型。