Javascript 在 Freemarker 模板引擎中可以内联吗?
Is Javascript inlining possible in Freemarker template engine?
是否可以在 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中是否有类似的功能?
没有任何专门用于该目的的东西。如果你想打印一个简单的字符串,你可以这样做:
<script>
var user = "${session.user?js_string}";
</script>
和类似的 var someNumber = ${session.someNumber?c};
一个数字。但是没有用于转储复合对象的内置解决方案。
我想知道将 ?json
添加到 FreeMarjer 是否是个好主意(它经常需要),它将任意对象转换为 JSON(也有效 JavaScript) ,但安全隐患是可怕的。您将对象的内容递归地转储到客户端...当开发人员将 getter 添加到 class 时,他们没有必要意识到模板将遍历并通过它公开整个对象图。
但是,您可以将方法添加到数据模型或作为共享变量添加到执行此操作的 Configuration
单例。 var something = ${toJS(session.something)};
。 (或者实际上,#macro
也可以做到这一点,但它更丑陋,而且速度稍慢。)但请考虑如何将暴露给客户的内容掌握在手中。
是否可以在 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中是否有类似的功能?
没有任何专门用于该目的的东西。如果你想打印一个简单的字符串,你可以这样做:
<script>
var user = "${session.user?js_string}";
</script>
和类似的 var someNumber = ${session.someNumber?c};
一个数字。但是没有用于转储复合对象的内置解决方案。
我想知道将 ?json
添加到 FreeMarjer 是否是个好主意(它经常需要),它将任意对象转换为 JSON(也有效 JavaScript) ,但安全隐患是可怕的。您将对象的内容递归地转储到客户端...当开发人员将 getter 添加到 class 时,他们没有必要意识到模板将遍历并通过它公开整个对象图。
但是,您可以将方法添加到数据模型或作为共享变量添加到执行此操作的 Configuration
单例。 var something = ${toJS(session.something)};
。 (或者实际上,#macro
也可以做到这一点,但它更丑陋,而且速度稍慢。)但请考虑如何将暴露给客户的内容掌握在手中。