在Freemarker模板引擎中可以使用Javascript内联吗?

问题描述 投票:0回答:1

是否可以在Freemarker模板引擎中对复杂对象执行Javascript内联,以实现在Thymeleaf中可以完成的任务?例如,如Thymeleaf tutorial中所述,如果我们有以下代码:

<script th:inline="javascript">
    var user = [[${session.user}]];
</script>

${session.user}表达式将计算为User对象,Thymeleaf将正确地将其转换为Javascript语法:

<script th:inline="javascript">
    var user = {'age':null,'firstName':'John','lastName':'Apricot',
                'name':'John Apricot','nationality':'Antarctica'};
</script>

如果Freemarker中有类似的功能?

javascript java thymeleaf freemarker
1个回答
1
投票

没有任何专门用于此目的的东西。如果要打印简单字符串,可以执行此操作:

<script>
  var user = "${session.user?js_string}";
</script>

和类似的var someNumber = ${session.someNumber?c};一样。但是没有用于转储复合对象的内置解决方案。

我想知道是否将?json添加到FreeMarjer,它将任意对象转换为JSON(也是有效的JavaScript),这将是一个好主意(它经常需要),但安全隐患是可怕的。您将对象的内容递归地转储到客户端...当开发人员将getter添加到类时,他们没有必要意识到模板将通过它遍历整个对象图。

但是,您可以将方法添加到数据模型中,或者作为共享变量添加到执行该操作的Configuration单例中。 var something = ${toJS(session.something)};。 (或者实际上,#macro也能做到这一点,但它更丑陋而且有点慢。)但是考虑一下你将如何处理暴露给客户的东西。

© www.soinside.com 2019 - 2024. All rights reserved.