freeMarker(十二)——模板语言补充知识
学习笔记,选自freeMarker中文文档,译自 Email: ddekany at users.sourceforge.net
1.特殊变量参考
特殊变量是由FreeMarker引擎自己定义的变量。要访问它们, 你可以使用 .variable_name
语法。 比如,你不能仅仅写 version
,而必须写.version
。
dataModel
代替 data_model
。 但是需要知道在相同的模板中,FreeMarker 会对模板语言部分的标识符强制使用驼峰格式 (用户自定义名称是无效的)。
支持的特殊变量有:
current_template_name
: 当前所在的模板名称(从 FreeMarker 2.3.23 版本开始可用)。 如果模板是在Java中 (通过new Template(null, ...)
) 动态创建的, 而不是从后台通过名称 (通过cfg.getTemplate(name, ...)
)加载的。 那么它可以为空(null
)。 迁移说明:如果使用它来替换废弃的template_name
, 请注意,如果模板没有名字,那么它是一个长度为0的字符串,而不是空 (null
),所以可以在遗留的模板中编写current_template_name!''
。data_model
:可以用来直接访问数据模型的哈希表。 也就是,使用global
指令定义在这里不可见的的变量。error
(从 FreeMarker 2.3.1 版本开始可用): 该变量在recover
指令 体中可以访问,它存储了我们要恢复错误的信息。globals
:可以用来访问全局可访问的变量的哈希表: 数据模型和由global
指令创建的变量。请注意,用assign
或macro
创建的变量不是全局的。 因此当你使用globals
时你不能隐藏变量。lang
:返回当前本地化设置的语言部分的值。 比如.locale
是en_US
, 那么.lang
是en
。locale
:返回当前本地化设置的值。 这是一个字符串,比如en_US
。 要获取关于本地化字符串值的更多内容,请参考setting
指令。locale_object
(从 FreeMarker 2.3.21 版本开始可用): 以java.util.Locale
对象返回本地化设置的当前值,而不是字符串。 也就是说,当你想要传递一个java.util.Locale
对象给Java方法时, 它可以用于代替.locale
。(Locale
对象会根据object_wrapper
设置项的值来被包装。是否真的可以以Locale
对象传递该值给Java方法依赖于对象包装器, 但是对象包装器允许你直接调用Java方法不太可能不支持它。)locals
:你可以访问局部变量的哈希表 (由local
指令创建的变量,还有宏的参数)。main
:可以用来访问主命名空间的哈希表。 请注意,像数据模型中的全局变量通过这个哈希表是 不 可见的。main_template_name
:顶级模板的名称 (从 FreeMarker 2.3.23 版本开始可用)。(在Java中,这就是Template.process
调用的模板) 如果模板是在Java中 (通过new Template(null, ...)
) 动态创建出来的,而不是从存储器中以名称加载(通过cfg.getTemplate(name, ...)
)的, 那么它可以不存在(null
)。迁移说明: 如果使用它来替换废弃的template_name
, 请注意,如果模板没有名字,那么它是一个长度为0的字符串,而不是空 (null
),所以可以在遗留的模板中编写current_template_name!''
。namespace
:可以用来访问当前 命名空间 的哈希表。 请注意,像数据模型中的全局变量通过这个哈希表是 不 可见的。node
(由于历史原因重命名为current_node
):可以用访问者模式(也就是用visit
,recurse
等指令)处理的当前结点。 而且,当使用 FreeMarker XML Ant 任务 时, 它初始存储根结点。now
:返回当前的日期-时间。使用示例: "Page generated: ${.now}
", "Today is ${.now?date}
", "The current time is ${.now?time}
"。output_encoding
(从 FreeMarker 2.3.1 版本开始可用):返回当前输出字符集的名称。 如果框架封装 FreeMarker 却没有为 FreeMarker 指定输出字符集时这个特殊变量是不存在的。 (程序员可以在 这里... 阅读关于字符集问题的更多内容。)template_name
:不要使用它, 因为当使用宏时,它的行为是很奇怪的;使用current_template_name
或main_template_name
来代替(参考那里的迁移说明)。 给出主模板的名字,如果我们运行包含或导入的模板,那么就是它们的名字。 当调用宏时,那就有些困惑了:宏调用不改变该特殊变量的值,但是当nested
被调用时,它会变成模板所属当前命名空间的名字。 (从FreeMarker 2.3.14 版本开始可用)url_escaping_charset
(从 FreeMarker 2.3.1 版本开始可用):如果存在, 它存储了应该用于URL转义的字符集的名称。 如果这个变量不存在就意味着没有人指定URL编码应该使用什么样的字符集。 这种情况下,url
内建函数 使用特殊变量output_encoding
指定的字符集来进行URL编码。 处理机制和它是相同的。(程序员可以在 这里... 阅读关于字符集问题的更多内容。)vars
:表达式.vars.foo
返回和表达式foo
相同的变量。 出于某些原因你不得不使用方括号语法时这是有用的,因为它只对哈希表子变量有用, 所以你需要一个人工创建的父哈希表。比如,要读取有特殊名称的顶层变量可能会把 FreeMarker 弄糊涂,你可以写.vars["A strange name!"]
。 或者,使用和变量varName
给定的动态名称访问顶层变量你可以写.vars[varName]
。请注意,这个哈希表由.vars
返回,并不支持?keys
和?values
。version
:返回 FreeMarker 版本号的字符串形式, 比如2.2.8
。这可以用来检查你的应用程序使用的是哪个版本的 FreeMarker,但是要注意这个特殊变量在 2.3.0 或 2.2.8 版本之前不存在。 非最终发行版本号在数字包含破折号和进一步信息,比如 2.3.21-nightly_20140726T151800Z.
2.FTL中的保留名称
下面的这些名称不能在非方括号语法中被用作顶层变量 (比如 .vars["in"]
),因为这是FTL中的关键字:
true
:布尔值"true"false
:布尔值"false"gt
:比较运算符"大于"gte
:比较运算符"大于或等于"lt
:比较运算符"小于"lte
:比较运算符"小于或等于"as
:由少数指令使用in
:由少数指令使用using
:由少数指令使用
译自 Email: ddekany at users.sourceforge.net
转载于:https://www.cnblogs.com/fx-blog/p/6296477.html
freeMarker(十二)——模板语言补充知识相关推荐
- C语言编程>第二十二周 ⑥ 请补充fun函数,该函数的功能是:把字符下标能被2和3同时整除的字符从字符串s中删除,把剩余的字符重新保存在字符串s中。
例题:请补充fun函数,该函数的功能是:把字符下标能被2和3同时整除的字符从字符串s中删除,把剩余的字符重新保存在字符串s中.字符串s从键盘输入,其长度作为参数传入fun函数. 例如,输入 " ...
- 第三十二章 XML基础知识概念
文章目录 第三十二章 XML基础知识概念 attribute CDATA区域 comment content model default namespace DOM DTD(文档类型定义) eleme ...
- IT职场人生系列之十二:语言与技术I
本文是IT职场人生系列的第十二篇. 最近移动互联网很流行,很多人都在学习IOS.Android编程.这也引起一个入行.改行的潮流. 那么,作为新手.老手,应该怎样选择自己学习的语言和技术呢? 本人从早 ...
- 价值4500的国际版多语言点赞抖音分享点赞任务平台源码(十二种语言)
介绍: 平台会员分享给我的,他自己搭建成功了,测试可用!我就不测试了,需要的拿! 九种语言 :西班牙语,泰语.日语,印度尼西亚语言.越南语言.英文.繁体中文,简体中文,印度语 前台支持更换5种颜色风格 ...
- 第一列和第三列12字符c语言,第十二C语言 二级.ppt
<第十二C语言 二级.ppt>由会员分享,可在线阅读,更多相关<第十二C语言 二级.ppt(24页珍藏版)>请在人人文库网上搜索. 1.第十一讲,字符串及字符数组的使用,字符串 ...
- freeMarker(十)——模板语言之内建函数
学习笔记,选自freeMarker中文文档,译自 Email: ddekany at users.sourceforge.net 1.字符串内建函数 这些内建函数作用于表达式左侧的字符串值. 如果左侧 ...
- 全国计算机技术与软件专业技术资格(水平)考试【软件评测师】-考试内容总结(十二)软件评测基础知识...
12.测试用例设计方法 12.1测试用例的基本概念 12.1.1测试用例的概念 测试用例是一个关于具体测试步骤的文档,描述了测试的输入参数.条件以及配置,以及预期的输出结果等,以判断被测软件的工作是否 ...
- c++面向对象高级编程 学习十二 模板
模板特化: 模板是一种泛化的形式,特化是将参数类型进行指定,写出特化的版本,当在调用下图cout<<hash()(1000);的时候,由于特化中有struct hash{ }的版本,因此会 ...
- Android-JNI开发系列《十二》总结JNI知识体系
人间观察 人啊 不能读太多的书 不能用圣人的话看这个世道 不然会看走了眼 本篇对jni知识体系的进行总结,本来是写完Android平台下的对mp3编解码后总结的,但是我想了下mp3编解码后续单独文章介 ...
最新文章
- nginx图片过滤处理模块http_image_filter_module安装配置笔记
- 接收服务器显示帧控制错误,Websocket连接关闭,出现错误“接收到意外的继续帧”...
- 使用zerotier让异地设备组局域网
- Git 版本控制之 GitFlow
- python 操作 excel
- (step6.3.2)hdu 1068(Girls and Boys——二分图的最大独立集)
- 有人知道 I3C 吗?
- 我不够格,但我还是希望事情到此为止,继续工作罢
- php自己创建函数,php自定义函数之内部函数
- android实现截图功能吗,Android实现拍照截图功能
- 2017.5.9 积木大赛 思考记录
- 199-Pycharm相关
- leetcode 338 比特位计数
- [zz]Win8应用商店管理小工具
- 线程中消费者生产者的实例代码(synchronized关键字)
- Java高并发程序设计学习笔记(十):并发调试和JDK8新特性
- 最新最全 快递公司编码 更新时间2020.07.31
- Dapr for dotnet | 并发计算模型 - Virtual Actors
- 地铁客流量分析可视化演示系统(附代码)
- 蛋白和肽测序仪销量、收入、价格、毛利率及市场份额
热门文章
- Linux c modbus 线程,Modbus TCP Slave Thread - 设置和获取寄存器值
- 关于Servlet报错:405 HTTP method GET is not supported by this URL问题解决方法
- 微型计算机原理DL,微型计算机原理练习附解答.doc
- mysql中explain的详细解释
- 开源GIS(二)——openlayers加载Arcgis和geoserver在线离线切片
- AS:Flash AS3中获取浏览器信息及URL相关参数(并非swf url地址)
- JS数组的相关操作(循环、查找、过滤、排序等)
- 阿里服务器降温系统,双十一服务器靠“泡澡”降温?阿里看上了3M的这项“冷”科技...
- android百度定位代码,android开发:百度地图及定位的演示代码
- 每天Leetcode 刷题 初级算法篇-打乱数组