2017-10-10 39 views
0

我試圖在我的應用程序中實現d3 js圖。我正在按照here所述的示例進行操作。這是由圖書館的作者開發的,它很好地工作。我現在手動創建一個json字符串(並且是硬編碼的!)用於測試,並且我想將它從控制器傳遞給HTML以進行呈現。春天 - 如何將字符串傳遞給JavaScript的HTML?

D3Service classis:

public String buildGraphJsonFromId(String id) { 
    LOG.debug("Generating graph JSON data for id: " + id); 
    return buildJson(id); 
} 

protected String buildJson(String id) { 
    StringBuilder stringBuilder = new StringBuilder(); 
    stringBuilder.append("{"); 
    stringBuilder.append("\"name\": \"Clifford Shanks\","); 
    stringBuilder.append("\"born\": 1862,"); 
    stringBuilder.append("\"died\": 1906,"); 
    stringBuilder.append("\"location\": \"Petersburg, VA\","); 
    stringBuilder.append("\"parents\": ["); 
    stringBuilder.append("{"); 
    stringBuilder.append("\"name\": \"James Shanks\","); 
    stringBuilder.append("\"born\": 1831,"); 
    stringBuilder.append("\"died\": 1884,"); 
    stringBuilder.append("\"location\": \"Petersburg, VA\","); 
    stringBuilder.append("\"parents\": ["); 
    stringBuilder.append("{"); 
    stringBuilder.append("\"name\": \"Robert Shanks\","); 
    stringBuilder.append("\"born\": 1781,"); 
    stringBuilder.append("\"died\": 1871,"); 
    stringBuilder.append("\"location\": \"Ireland/Petersburg, VA\""); 
    stringBuilder.append("},"); 
    stringBuilder.append("{"); 
    stringBuilder.append("\"name\": \"Elizabeth Shanks\","); 
    stringBuilder.append("\"born\": 1795,"); 
    stringBuilder.append("\"died\": 1871,"); 
    stringBuilder.append("\"location\": \"Ireland/Petersburg, VA\""); 
    stringBuilder.append("}"); 
    stringBuilder.append("]"); 
    stringBuilder.append("},"); 
    stringBuilder.append("{"); 
    stringBuilder.append("\"name\": \"Ann Emily Brown\","); 
    stringBuilder.append("\"born\": 1826,"); 
    stringBuilder.append("\"died\": 1866,"); 
    stringBuilder.append("\"location\": \"Brunswick/Petersburg, VA\","); 
    stringBuilder.append("\"parents\": ["); 
    stringBuilder.append("{"); 
    stringBuilder.append("\"name\": \"Henry Brown\","); 
    stringBuilder.append("\"born\": 1792,"); 
    stringBuilder.append("\"died\": 1845,"); 
    stringBuilder.append("\"location\": \"Montgomery, NC\""); 
    stringBuilder.append("},"); 
    stringBuilder.append("{"); 
    stringBuilder.append("\"name\": \"Elizabeth Shanks\","); 
    stringBuilder.append("\"born\": 1793,"); 
    stringBuilder.append("\"died\": 1882,"); 
    stringBuilder.append("\"location\": \"Montgomery, NC\""); 
    stringBuilder.append("}"); 
    stringBuilder.append("]"); 
    stringBuilder.append("}"); 
    stringBuilder.append("]"); 
    stringBuilder.append("}"); 
    return stringBuilder.toString(); 
} 

D3Controller是:

<script th:inline="javascript" type="text/javascript"> 
    $(document).ready(function() { 
     var graphData = '${d3Data}'; 
     alert(graphData); 
     // continued javascript detailed on the example 
    }); 
</script> 

我想要什麼:

@RequestMapping("/graph") 
public void buildJsonForGraph(ModelMap modelMap) { 
    modelMap.addAttribute("d3Data", buildD3GraphData("id")); 
    System.out.println(buildD3GraphData("id")); 
} 

protected String buildD3GraphData(String id) { 
    // service layer method call to deliver the specific json 
    return d3Service.buildGraphJsonFromId(id); 
} 

而且HTML<script />會議開始由定義這裏要做的是,當頁面是loade時d,json文本字符串將被傳遞給javascript和呈現的樹。

相反,我什麼也得不到。我在這裏錯過了什麼?

回答

1

如果你使用JSTL,你可以這樣做:

<script th:inline="javascript" type="text/javascript"> 
    $(document).ready(function() { 
     var graphData = '<c:out value="${d3Data}"/>'; 
     alert(graphData); 
     // continued javascript detailed on the example 
    }); 
</script> 
相關問題