使用 Thymeleaf 从 Spring 模型设置 JavaScript 变量

IT技术 javascript spring thymeleaf
2021-02-23 04:23:33

我使用 Thymeleaf 作为模板引擎。我如何将变量从 Spring 模型传递给 JavaScript 变量?

弹簧侧:

@RequestMapping(value = "message", method = RequestMethod.GET)
public String messages(Model model) {
    model.addAttribute("message", "hello");
    return "index";
}

客户端:

<script>
    ....
    var m = ${message}; // not working
    alert(m);
    ...
</script>
6个回答

根据官方文档

<script th:inline="javascript">
/*<![CDATA[*/

    var message = /*[[${message}]]*/ 'default';
    console.log(message);

/*]]>*/
</script>
@MichałStochmal 您可以在外部 javascript 之上加载内联 javascript,并在外部 javascript 中使用相同的变量(在内联 javascript 中定义)。
2021-04-25 04:23:33
工作正常,也可以从 messages.properties 读取: var msg = [[#{msg}]];
2021-04-27 04:23:33
@szxnyc 如果你忘记了/*<![CDATA[*/宏,你会得到它。
2021-04-28 04:23:33
还要注意 <script th:inline="javascript">
2021-05-02 04:23:33
不起作用... javascript 错误未捕获的语法错误
2021-05-10 04:23:33

现在百里香3:

  • 显示一个常数:

    <script th:inline="javascript">
    var MY_URL = /*[[${T(com.xyz.constants.Fruits).cheery}]]*/ "";
    </脚本>
    
  • 显示一个变量:

    var message = [[${message}]];
    
  • 或者在以静态方式打开模板文件时(不在服务器上执行它)时在注释中获得有效的 JavaScript 代码。

    Thymeleaf 称之为:JavaScript 自然模板

    var message = /*[[${message}]]*/ "";
    

    Thymeleaf 将忽略我们在评论之后和分号之前写的所有内容。

更多信息:http : //www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#javascript-inlining

感谢您!想给你一杯啤酒,我一直在寻找这种语法 var MY_URL = /*[[${T(com.xyz.constants.Fruits).cheery}]]*/ "";
2021-05-09 04:23:33
var message =/*[[${message}]]*/ 'defaultanyvalue';
注意 /* */ 和包含的 [[ ]] 之间不应该有空格。
2021-04-30 04:23:33
值得注意的是,defaultanyvalue只有在静态运行页面时才会使用,即在 Web 容器之外。如果在容器内运行并且message未声明变量,则生成的源代码将是var message = null;
2021-04-30 04:23:33
添加th:inline="javascript"到脚本标签也很重要
2021-05-13 04:23:33

根据文档,有几种方法可以进行内联。
您必须根据情况选择正确的方法。

1) 只需将变量从服务器放到 javascript 中:

<script th:inline="javascript">
/*<![CDATA[*/

var message = [[${message}]];
alert(message);

/*]]>*/
</script>

2) 将 javascript 变量与服务器端变量结合,例如,您需要在 javascript 内部创建用于请求的链接:

<script th:inline="javascript">
        /*<![CDATA[*/
        function sampleGetByJquery(v) {
            /*[+
            var url = [[@{/my/get/url(var1=${#httpServletRequest.getParameter('var1')})}]] 
                      + "&var2="+v;
             +]*/
            $("#myPanel").load(url, function() {});
        }
        /*]]>*/
        </script>

我无法解决的一种情况- 然后我需要在模板内部调用的 Java 方法中传递 javascript 变量(我猜这是不可能的)。

确保你已经在页面上有 thymleaf

//Use this in java
@Controller
@RequestMapping("/showingTymleafTextInJavaScript")
public String thankYou(Model model){
 model.addAttribute("showTextFromJavaController","dummy text");
 return "showingTymleafTextInJavaScript";
}


//thymleaf page  javascript page
<script>
var showtext = "[[${showTextFromJavaController}]]";
console.log(showtext);
</script>