en passant les données json à partir de servlet pour jsp pour fichier js
J'ai eu cette servlet, qui crée des données JSON et je tiens à transmettre ces données à une page jsp qui est censé afficher les données par l'intermédiaire de la trousse à outils InfoVis.
servlet.java
JSONObject json = new JSONObject();
JSONArray toplevel = new JSONArray();
JSONObject sublevel;
try{
json.put("id", "node" + 0);
json.put("name", "name" + 0);
int count = 5;
for(int i=1; i < count; i++){
sublevel = new JSONObject();
sublevel.put("id", "node" + i);
sublevel.put("name", "name" + i);
toplevel.put(sublevel);
}
json.put("children", toplevel);
} catch (JSONException jse) {
}
request.setAttribute("jsonString", json.toString());
RequestDispatcher dispatcher = request.getRequestDispatcher("graph.jsp");
dispatcher.forward(request, response);
Le Code suivant est fourni par la Trousse à outils InfoVis et je ne suis pas sûr si elle peut être changée. Ou, au moins, je n'ai pas assez d'expérience en JS pour le changer.
graphique.jsp
<body onload="init('${jsonString}');">
spacetree.js
function init(jsonString){
var json = jsonString;
À l'origine de l'appel de fonction est uniquement
<body onload="init()">
mais la fonction init() est le JSON variable codée en dur, ce qui n'est bien sûr pas du tout utile. Donc, je suis à la recherche d'une façon de faire de cette dynamique. Mais depuis il y a des citations à l'intérieur de la chaîne, il est maintenant totalement bousille le onload=init() de l'appel de fonction..
OriginalL'auteur PogoMips | 2013-01-29
Vous devez vous connecter pour publier un commentaire.
Le bon marché et facile est de modifier la JSP si c'sorties ceci:
L'inconvénient de cette méthode est qu'elle crée une variable globale, mais si vous appelez
init
de cette façon,init
est déjà un mondial, de sorte que le navire a navigué. 🙂son code passe l'objet en tant que paramètre à la "init" de la fonction.
Ah ouais, remarqué que, dans le débogueur. grâce, qu'elle n'en résout 🙂
+1 pour non seulement la réponse, mais aussi pour le "qui-bateau-a-navigué" chortle.
OriginalL'auteur T.J. Crowder
Vous n'avez pas à déposer le JSON comme une chaîne de caractères - elle valide la syntaxe JavaScript:
Quand c'est rendu par JSP, le résultat final: le code HTML est envoyé au navigateur — sera quelque chose comme:
Maintenant, la seule chose que vous pouvez faire est de codage HTML au format JSON, puisque vous êtes le laisser tomber comme une valeur de l'attribut HTML:
Alors votre "init" de la fonction peut s'attendre à un prêt-à-utilisation de l'objet JavaScript, sans avoir besoin d'appeler un parser JSON.
{"foo": "It's messed up now"}
? 🙂 Le'
dansit's
mettra fin à l'onload
attribut...oui, je viens de rajouter la partie sur le codage HTML 🙂
Pointu: Sera qui codent pour des apostrophes? Vous pouvez choisir de passer aux doubles pour l'attribut délimiteur, je suis sûr qu'il doit coder...
I
vérifié que
fn:escapeXml()
échappe toujours à la fois simple et double - guillemets.OriginalL'auteur Pointy