thymeleaf内联javascript框架问题

时间:2013-08-19 16:46:44

标签: javascript inline thymeleaf

<script th:inline="javascript" type="text/javascript">
    //expose list data to javascript
    var listObject = /*[[${listObject}]]*/ [];
</script>

打印到文件中的替换文本与Jackson库的ObjectMapper不同。

在上面的示例中使用Thymeleaf,listObject将是

{
   "dataType":{
      "$type":"DataType",
      "$name":"STRING"
   },
   "friendlyName":"Customer Key"
}

如果我用ObjectMapper打印对象(也用于Spring @RequestBody / @ ResponseBody),它将是

{
   "dataType":"STRING",
   "friendlyName":"Customer Key"
}

有没有办法可以强制百万美元与ObjectMapper兼容。

2 个答案:

答案 0 :(得分:2)

我认为this必须说明关于杰克逊和JSON在百里香中的内联 总而言之,考虑切换到自定义TextInliners的可能性 3.0百万美元的里程碑。

所以,目前没有“干净”的方式来切换到Jackson json序列化。

然而,你可以做的是偷偷摸摸你自己的TextInliner。那就是:

  1. 创建课程org.thymeleaf.standard.inliner.StandardJavaScriptTextInliner
  2. 实施您自己的formatEvaluationResult(Object)方法版本,
    你可以在哪里调用Jackson ObjectMapper。
  3. 将这个新的StandardJavaScriptTextInliner类放在适当的位置,以便在原始类之前加载它(tomcat中的f.e.将它放在正确的包结构下的类dir中)。

答案 1 :(得分:0)

另一种选择:

在thymeleaf上下文中设置listObject时,将其设置为通过使用Jackson将listObject转换为JSON字符串获得的字符串

然后使用JS eval()或更好的方法 - JSON.parse将字符串转换为JS对象。