我试图将值从模型映射(在控制器中设置)传递到Thymeleaf(版本3.0.11)模板中的外部Javascript文件中,但无法正常工作。我的猜测是我的语法不正确,但是我找不到我要解决的确切问题的适当文档。
所以在控制器中,我将值存储在模型图中:
@RequestMapping(method = GET)
public String showView(final ModelMap modelMap, final HttpServletRequest request) {
modelMap.addAttribute(MESSAGE, "message");
return VIEW;
}
然后在VIEW
模板中,我当前正在使用内联Javascript来设置值以供以后在外部Javascript文件中使用(当前工作正常):
<script th:inline="javascript">
const message = /*[[${MESSAGE}]]*/ '';
</script>
但是我们想从应用程序中删除所有内联Javascript,因此我们需要以其他方式传递此值。我们的想法是这样做:
<div id="SOME_ID" th:attr="data-message=${MESSAGE}">SOME CONTENT</div>
然后在外部Javascript文件中,我们获得以下属性的值:
var message = document.getElementById("SOME_ID").getAttribute("data-message");
但是不幸的是,这不起作用,在这种情况下,变量始终为null。
它确实适用于其他类型的属性,例如:
<div id="SOME_OTHER_ID" th:attr="data-url=@{/some/url}"
我们可以在外部Javascript中正确获取此值,如下所示:
var url = document.getElementById("SOME_OTHER_ID").getAttribute("data-url");
我们使用了错误的语法吗?还是我们根本不应该采用这种方法?