2009-10-15 5 views
6

Je ne connais que très peu les JSP avec moi. J'ai un JSP où j'utilise un framework javascript pour créer un graphique en utilisant l'API de visualisation de Google.Objets JSP, JavaScript et Java

Mon servlet renvoie un objet hashmap ventes avec l'année comme clé et l'entier (numéro de vente) comme valeur.

Mon javascript utilise l'objet de vente pour ajouter des données à l'API graphique Google qui crée mon graphique. Code :

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

L'objet de vente dans mes js obtient le hashmap mais c'est une longue chaîne. Dois-je l'analyser dans mon javascript ou y a-t-il un moyen de placer correctement l'objet hashmap dans l'objet de vente javascript?

Répondre

2

Java et Javascript sont des langages complètement différents. Javascript ne sait pas quoi faire avec un objet Java HashMap (en fait, dans votre exemple, vous obtiendrez la sortie de HashMap.toString()). Vous devrez le sérialiser sous une forme que Javascript comprendra, par exemple. JSON.

+0

Il est préférable de retourner une chaîne JSON au lieu de la carte, en premier lieu. Je l'aime comme ça. Le faire en JavaScript va bien aussi. +1 –

0

Tout ce morceau de code

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

fait est d'imprimer la valeur de session.getAttribute("sales") à la sortie HTML. Sans aucune logique de votre part quant à la façon de formater la sortie, Java appellera simplement .toString() sur cet objet - dont l'implémentation par défaut (sauf si vous l'écrasez) entraîne généralement une sortie qui ressemble à [email protected]. Donc, la réponse courte est que oui, vous aurez besoin de mettre dans une certaine logique du côté de Java autant que vous voulez que votre objet/structure de données soit sortie dans le document HTML.

1

Essayez d'utiliser JSON qui vous permettra de décrire votre objet Java dans json (notation objet Java) De cette façon, vous pouvez charger l'objet décrit directement dans javascript.

+0

Oui, je préfère ça aussi. Il vaut mieux renvoyer une chaîne JSON au lieu de Map, en premier lieu. +1 –

4

vous n'aurez pas besoin d'utiliser une bibliothèque JSON externe (mais vous pouvez!) - vous pouvez imprimer le JSON directement dans une variable javascript comme:

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

Il vaut mieux renvoyer une chaîne JSON au lieu de Map, en premier lieu. Je l'aime comme ça. C'est bien aussi. +1 –

+0

Le problème avec le renvoi d'une chaîne JSON est que vous liez la présentation des données avec le calcul des données dans le contrôleur. Le retour d'une carte présente l'avantage que la couche suivante peut la transformer en quelque chose de plus adapté au client (en supposant qu'une carte est une structure de données commune pouvant être utilisée pour communiquer entre la couche du contrôleur et la couche d'affichage). – Chii