2009-10-15 3 views
6

Я новичок в JSP, так голый со мной. У меня есть JSP, где я использую структуру javascript для построения диаграммы с использованием API визуализации Google.JSP, JavaScript и объекты Java

Мой сервлет возвращает объект hashmap продаж с годом в качестве ключа и целого числа (номер продаж) в качестве значения.

Мой javascript использует объект продаж для добавления данных в API диаграммы Google, который строит мою диаграмму. код:

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

Объект продажи в моем JS получает HashMap, но это длинная строка. Должен ли я разбирать его в своем javascript или есть способ, которым он автоматически поместит объект hashmap должным образом в объект продажи javascript?

ответ

2

Java и Javascript - совершенно разные языки. Javascript не знает, что делать с объектом Java HashMap (на самом деле в вашем примере вы получите вывод HashMap.toString()). Вам придется сериализовать его в некоторой форме, которую Javascript будет понимать, например. JSON.

+0

Лучше, чтобы вернуть JSON строку вместо карты, в первую очередь. Мне это нравится. Выполнение этого в JavaScript тоже хорошо. +1 –

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 –

4

вам не нужно использовать внешнюю библиотеку JSON (но вы могли бы!) - вы можете распечатать JSON непосредственно в яваскрипта переменную как:

<%@ 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 вместо Карты, в первую очередь. Мне это нравится. Это тоже хорошо. +1 –

+0

проблема с возвратом строки JSON заключается в том, что вы связываете представление данных с вычислением данных в контроллере. Возврат карты имеет преимущества в том, что следующий слой может преобразовать его в нечто более подходящее для клиента (предполагая, что карта - это общая структура данных, которая может использоваться для связи между уровнем контроля и уровнем представления). – Chii