2017-10-10 41 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> 
相关问题