繁体   English   中英

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

[英]Is Javascript inlining possible in Freemarker template engine?

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM