2009-10-15 11 views
6

Sono nuovo di JSP così nudo con me. Ho un JSP in cui sto usando un framework javascript per creare un grafico utilizzando l'API di visualizzazione di Google.Oggetti JSP, JavaScript e Java

Il mio servlet restituisce un oggetto hashmap di vendita con anno come chiave e intero (numero di vendita) come valore.

Il mio javascript utilizza l'oggetto vendite per aggiungere dati all'API del grafico di Google che crea il mio grafico. Codice:

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

L'oggetto delle vendite nei miei js ottiene il hashmap ma è una lunga serie. Devo analizzarlo nel mio javascript o esiste un modo in cui inserirà correttamente l'oggetto hashmap nell'oggetto di vendita javascript?

risposta

2

Java e Javascript sono lingue completamente diverse. Javascript non sa cosa fare con un oggetto Java HashMap (in realtà nel tuo esempio otterrai l'output di HashMap.toString()). Dovrai serializzarlo in una forma che Javascript comprenderà, ad es. JSON.

+0

Il suo meglio per restituire una stringa JSON invece di Map, innanzitutto. Mi piace così. Anche farlo in JavaScript va bene. +1 –

0

Tutto questo pezzo di codice

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

non fa altro che stampare il valore della session.getAttribute("sales") per l'output HTML. Senza alcuna logica da parte tua su come formattare l'output, Java chiamerà semplicemente .toString() su quell'oggetto - che l'implementazione predefinita (a meno che tu non lo sovrascriva) di solito produce un output che assomiglia a [email protected].

Quindi la risposta breve è che sì è necessario inserire una logica sul lato Java per quanto riguarda il modo in cui si desidera che la struttura dell'oggetto/dati venga emessa nel documento HTML.

1

Provare a utilizzare JSON che consente di descrivere il proprio oggetto Java in json (notazione oggetto script java) In questo modo è possibile caricare l'oggetto descritto direttamente in javascript.

+0

Sì, lo preferisco anch'io. È meglio restituire una stringa JSON invece di Map, in primo luogo. +1 –

4

è solito bisogno di utilizzare una libreria JSON esterno (ma si potrebbe!) - è possibile stampare il JSON direttamente in una variabile javascript come:

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

È meglio restituire una stringa JSON invece di Map, in primo luogo. Mi piace così. Anche questo va bene. +1 –

+0

il problema con la restituzione di una stringa JSON è che si sta legando la presentazione dei dati con il calcolo dei dati nel controller. Il ritorno di una mappa presenta vantaggi in quanto il livello successivo può trasformarlo in qualcosa di più adatto per il client (assumendo che una mappa sia una struttura dati comune che può essere utilizzata per comunicare tra il livello controller e il livello vista). – Chii

Problemi correlati