2009-10-15 61 views
6

我是新來的JSP如此裸露在我身邊。 我有一個JSP,我正在使用JavaScript框架使用Google Visualization API構建圖表。JSP,JavaScript和Java對象

我的servlet正在返回銷售hashmap對象,其年份爲鍵和整數(銷售編號)作爲值。

我的javascript使用銷售對象向Google圖表API添加數據,這些圖表構建我的圖表。 代碼:

sales = '<%= session.getAttribute("sales") %>'; 

銷售對象在我的js得到的HashMap,但它是一個很長的字符串。我必須解析它在我的JavaScript或有沒有辦法它會自動將hashmap對象正確地放入JavaScript銷售對象?

回答

2

Java和Javascript是完全不同的語言。 Javascript不知道如何處理Java HashMap對象(實際上在你的例子中你會得到HashMap.toString()的輸出)。您必須將其序列化爲Javascript將理解的某種形式,例如。 JSON。

+0

其更好地返回一個JSON字符串,而不是地圖,首先。我喜歡這樣。用JavaScript來做也不錯。 +1 – 2009-10-20 05:29:58

0

所有這一段代碼

sales = '<%= session.getAttribute("sales") %>'; 

確實是打印的session.getAttribute("sales")到HTML輸出的值。如果沒有任何關於如何格式化輸出的邏輯,Java將僅僅在該對象上調用.toString()--默認實現(除非您覆蓋它)通常會產生類似於[email protected]的輸出。

所以簡短的回答是,您需要在Java方面放置一些邏輯,直到您希望將對象/數據結構輸出到HTML文檔中。

1

嘗試使用JSON這將允許你描述你的Java對象在JSON(Java腳本對象表示法)這樣你就可以直接將所描述的對象加載到JavaScript中。

+0

是的,我也喜歡。最好先返回一個JSON字符串而不是Map。 +1 – 2009-10-20 05:29:14

4

你不會需要使用外部JSON庫(但你可以!) - 你可以打印出JSON直接進入像JavaScript變量:

<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %> 
<script> 
(function(){ 
    var sales = { 
    <c:forEach var="entry" items="${requestScope['sales'].entrySet}" varStatus="counter"> 
     '${entry.key}' : ${entry.value} //outputs "2000" :1234 , 
     <c:if test="${!counter.last}">, </c:test> 
    </c:foreach> 
    }; 
    //js code that uses the sales object 
    doStuffWith(sales); 
})() 
</script> 
+0

首先,最好返回一個JSON字符串而不是Map。我喜歡這樣。這也沒關係。 +1 – 2009-10-20 05:28:27

+0

返回JSON字符串的問題在於,您將數據的表示與控制器中的數據計算綁定在一起。 返回地圖的優點在於,下一層可以將其轉換爲更適合客戶端的東西(假設地圖是可用於在控制器層和視圖層之間進行通信的公共數據結構)。 – Chii 2009-10-20 06:01:22