我在我的网络应用中使用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] ]');
由于引号代码不起作用,我应该怎么做才能摆脱它们?如果有更好的方法将数据插入图表,请告诉我。
答案 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"
。