我得到了这个用于创建JSON数据的servlet,我想将此数据传递到应该通过InfoVis工具包显示该数据的jsp页面。
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);
以下代码由InfoVis工具包提供,我不确定是否可以更改。或者至少我没有足够的JS经验来更改它。
graph.jsp
<body onload="init('${jsonString}');">
spacetree.js
function init(jsonString){ var json = jsonString;
本来函数调用只是
<body onload="init()">
但是init()函数具有JSON变量硬编码,这当然根本没有用。因此,我正在寻找一种使之动态化的方法。但是,由于字符串内有引号,所以它现在完全弄乱了onload = init()函数调用。
便宜和容易的方法是修改JSP,因此它输出以下内容:
<script> var theData = ${jsonString}; </script> <body onload="init(theData);">
缺点是它创建了一个全局变量,但是如果您init以这种方式调用,init它已经是一个全局变量,因此该船已经航行了。:-)
init