Thymeleaf内联javascript变量表达式

时间:2018-06-20 11:03:13

标签: javascript spring-boot thymeleaf

我正在将Spring Boot与Thymeleaf一起使用,并且知道我可以通过以下方式在javascript中使用控制器中的变量:

<script th:inline="javascript">

/*<![CDATA[*/
var username = [[${#authentication.principal.person.isSubscribedTo("random string")}]];
/*]]>*/

</script>

现在,我试图像这样在CDATA注释之外使用局部变量。我希望我可以在方法中使用它。

var randomString = "can i use this?";
/*<![CDATA[*/
var username = [[${#authentication.principal.person.isSubscribedTo(randomString)}]];
/*]]>*/

这不起作用,我无法测试,因为我的调试器无法获取该方法,并且不会返回任何错误。

如何在百里香javascript表达式中使用本地javascript变量?

1 个答案:

答案 0 :(得分:1)

您对何时何地发生的事情感到困惑。

首先,服务器使用Thymeleaf为页面生成HTML和动态Javascript。正如您所说的,在此过程中,Thymeleaf可以在服务器上运行时调用Spring Bean。

然后,将HTML和动态Javascript发送到浏览器后,它将在客户端全部运行Javascript。

唯一真正的方法是:

  1. 同样在服务器端,Thymeleaf或Thymeleaf可访问的模型中生成randomString
  2. 如果您需要在客户端生成该字符串,请让Javascript对该服务器进行单独的HTTP请求(“ AJAX”)调用,并将该信息发送给服务器,然后对响应进行合理的处理。也就是说,将Javascript发送到浏览器后,如果需要进行更多往返服务器的操作,则在Thymeleaf在页面中的作用完成后,它就在Javascript上以确保它能够发生。