使用Thymeleaf将数据动态插入到javascript图表中

时间:2017-05-24 13:48:52

标签: javascript java spring thymeleaf

我在我的网络应用中使用Google Charts。在我的控制器内部,我传递一个保存数据的对象,稍后我使用formatData()方法访问该对象,该方法返回格式化为String的数据。这就是这种方法的输出结果:

"[ [new Date(2017,4,27), 116.42], [new Date(2017,4,26), 116.26], [new Date(2017,4,25), 116.05] ]"  

我如何在HTML中插入数据:

<script type="text/javascript" th:inline="javascript">
      /*<![CDATA[*/
      data.addRows( [[${reco.formatData()}]] );
      /*]]>*/
</script>

但是Thymeleaf没有将输出解释为2d数组而是将其读作普通字符串。在HTMLS中,源代码如下所示:

data.addRows( '[ [new Date(2017,4,27), 116.42], [new Date(2017,4,26), 116.26], [new Date(2017,4,25), 116.05] ]');

由于引号代码不起作用,我应该怎么做才能摆脱它们?如果有更好的方法将数据插入图表,请告诉我。

2 个答案:

答案 0 :(得分:2)

在百里香3:

<script type="text/javascript" th:inline="javascript">
      /*<![CDATA[*/
      data.addRows( /*[(@{${reco.formatData()}})]*/ );
      /*]]>*/
</script>

答案 1 :(得分:1)

问题已经有一个(已接受的)答案,但这里有一个不同的观点:

我认为对th:inline="javascript"的作用存在误解。它采用表达式的结果并将的JavaScript对象格式化为(我认为JSON具体)。如果您的方法返回一个String,它也将是JavaScript代码中的String。这是一个功能而不是错误。

替代解决方案:

  • 从Java代码返回“正确”类型,而不是String。如果您想在JavaScript中使用数组,请从Java代码返回一个数组(或List)。

  • 要按原样插入字符串而不进行拦截,请将th:inline="javascript"替换为th:inline="text"