簡體   English   中英

將json數據從servlet傳遞到jsp到js文件

[英]passing json data from servlet to jsp to js file

我得到了這個創建JSON數據的servlet,我希望將這些數據傳遞給jsp頁面,該頁面應該通過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);

以下代碼由InfoVis Toolkit提供,我不確定是否可以更改。 或者至少我沒有足夠的經驗來改變它。

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已經是全局變量,所以這艘船已經航行了。 :-)

您不必將JSON作為字符串刪除 - 它是有效的JavaScript語法:

<body onload='init(${jsonString})'>

當由JSP呈現時,最終結果 - 發送到瀏覽器的HTML - 將類似於:

<body onload='init({"something": "some value", "whatever": "your data looks like"})'>

現在你唯一想做的就是HTML編碼JSON,因為你把它作為HTML屬性值刪除:

<body onload='init(${fn:escapeXml(jsonString)})'>

然后你的“init”函數可以期待一個可以使用的JavaScript對象,而根本不需要調用JSON解析器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM