我得到了这个用于创建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);">

缺点是它会创建一个全局变量,但是如果您以这种方式调用initinit已经是一个全局变量,所以这艘船已经航行了。 :-)

09-25 16:28
查看更多