2009-10-15 16 views
6

Jestem nowicjuszem w JSP, więc jestem zupełnie przy mnie. Mam stronę JSP, w której używam architektury javascript do tworzenia wykresów za pomocą interfejsu API Google Visualization.Obiekty JSP, JavaScript i Java

Mój servlet zwraca obiekt hierarchii sprzedaży z rokiem jako klucz i liczbę całkowitą (numer sprzedaży) jako wartość.

Mój javascript wykorzystuje obiekt sprzedaży do dodawania danych do interfejsu API wykresu Google, który tworzy mój wykres. Kod :

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

Przedmiotem sprzedaży w moich js dostaje hashmap ale to długi ciąg. Czy muszę parsować go w moim javascriptie, czy jest jakiś sposób, aby automatycznie wstawił on obiekt madhmap do obiektu sprzedaży javascript?

Odpowiedz

2

Java i Javascript to zupełnie inne języki. JavaScript nie wie, co zrobić z obiektem Java HashMap (faktycznie w twoim przykładzie otrzymasz wynik HashMap.toString()). Będziesz musiał serializować go w jakiejś formie, którą zrozumie JavaScript, np. JSON.

+0

Lepiej wrócić ciąg JSON zamiast mapą, na pierwszym miejscu. Lubię to w ten sposób. Zrobienie tego w JavaScript też jest w porządku. +1 –

0

Wszystko to kawałek kodu

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

robi jest druk wartość session.getAttribute("sales") do wyjścia HTML. Bez żadnej logiki z twojej strony, jak sformatować wyjście, Java będzie tylko wywoływać .toString() na tym Obiekcie - co domyślna implementacja (chyba że nadpisujesz to) zwykle skutkuje wyjściem, które wygląda jak [email protected].

Krótka odpowiedź brzmi, że tak, musisz umieścić logikę po stronie Java, o ile chcesz, aby twoja struktura obiektu/danych była wyprowadzana do dokumentu HTML.

1

Spróbuj użyć JSON, który pozwoli ci opisać twój obiekt Java w json (notacja obiektu skryptu java) W ten sposób możesz załadować opisany obiekt bezpośrednio do javascript.

+0

Tak, ja też to lubię. Lepiej jest zwrócić ciąg JSON zamiast Map, w pierwszej kolejności. +1 –

4

wont trzeba użyć zewnętrznej biblioteki json (ale można!) - można wydrukować json bezpośrednio do zmiennej JavaScript jak:

<%@ 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

Lepiej jest zwrócić ciąg JSON zamiast Map, w pierwszej kolejności. Lubię to w ten sposób. To też jest w porządku. +1 –

+0

Problem z zwracaniem ciągu JSON polega na powiązaniu prezentacji danych z obliczeniem danych w kontrolerze. Powrót do mapy ma zalety polegające na tym, że następna warstwa może przekształcić ją w coś bardziej odpowiedniego dla klienta (zakładając, że mapa jest powszechnie używaną strukturą danych, która może być używana do komunikacji między warstwą komrlerki a warstwą widoku). – Chii

Powiązane problemy