Freemarker模板引擎中可以内联Java语言吗?

时间:2019-04-30 09:49:21

标签: javascript java thymeleaf freemarker

是否可以在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中是否有类似功能?

1 个答案:

答案 0 :(得分:1)

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

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

,并类似地var someNumber = ${session.someNumber?c};输入一个数字。但是,没有内置的用于转储复合对象的解决方案。

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

但是,您可以将方法添加到数据模型中,也可以将共享方法添加到Configuration单例中,以实现此目的。 var something = ${toJS(session.something)};。 (或者实际上,#macro也可以做到这一点,但是它比较丑陋,而且速度稍慢。)但是请考虑如何与客户保持联系。