FreeMarker学习
文章平均质量分 78
FreeMarker是一款模板引擎。
自由与束缚JavaJavaScript
这个作者很懒,什么都没留下…
展开
-
024_输入输出字符集
1. 像其它大多数的Java应用程序一样, FreeMarker使用"UNICODE文本"(UTF-16)来工作。不过, 也有必须处理字符集的情况, 因为它不得不和外界交换数据, 这就会使用到很多字符集。2. 输入的字符集2.1. 当FreeMarker要加载模板文件(或没有解析的文本文件)时, 那就必须要知道文件使用的字符集。可以使用encoding配置来确定字符集。这个配置项只在FreeMarker使用Configuration对象的getTemplate方法加载模板(解析过的或没有解析过的)时原创 2021-06-09 16:45:00 · 122 阅读 · 0 评论 -
023_运行时变量和范围
1. 当调用Template.process方法时, 它会在方法内部创建一个Environment对象, 在process返回之前一直使用。该对象存储模板执行时的运行状态信息。除了这些, 它还存储由模板中指令, 如: assign, macro, local或global创建的变量。它不会尝试修改传递给process的数据模型对象, 也不会创建或替换存储在配置中的共享变量。2. 当你想要读取一个变量时, FreeMarker将会以这种顺序来查找, 直到发现了完全匹配的的变量名称才会停下来:2.1.原创 2021-06-09 16:28:37 · 95 阅读 · 0 评论 -
022_配置configuration
1. 配置(configuration)就是freemarker.template.Configuration对象, 它存储了常用(全局, 应用程序级)的设置, 定义了想要在所有模板中可用的变量(称为共享变量)。而且, 它会处理Template实例的新建和缓存。2. 运行中的模板会受配置设置的影响, 每个Template实例都有和它相关联的Configuration实例。通常可以使用Configuration.getTemplate(而不是直接调用Template的构造方法)来获得Template实例,原创 2021-06-09 16:28:27 · 2023 阅读 · 1 评论 -
021_程序指令
1. Java程序员可以使用TemplateDirectiveModel接口在Java代码中实现自定义指令。2. 例子2.1. 新建一个名为FMProgrammingDirective的动态Web工程, 同时添加相关jar包。2.2. 编写FMFactory.javapackage com.fm.util;import java.util.Map;import java.util.concurrent.ConcurrentHashMap;import freemarker.原创 2021-06-08 18:54:27 · 199 阅读 · 1 评论 -
020_程序方法
1. 方法变量在存于实现了TemplateMethodModel接口的模板中。这个接口包含一个方法: TemplateModel exec(java.util.List arguments)。2. 当使用FTL方法调用表达式时, exec方法将会被调用。形参将会包含FTL方法调用形参的值。exec方法的返回值给出了FTL方法调用表达式的返回值。3. TemplateMethodModelEx接口扩展了TemplateMethodModel接口。它没有添加任何新方法。事实上这个对象实现这个标记接口是给原创 2021-06-08 18:50:16 · 265 阅读 · 1 评论 -
019_对象包装
1. 对象包装器是实现了freemarker.template.ObjectWrapper接口的类。它的目标是实现Java对象(应用程序中特定类等, 比如: String, Map, List实例)和FTL类型系统之间的映射。原创 2021-06-08 18:43:18 · 227 阅读 · 1 评论 -
018_TemplateModel
1. 我们已经知道如何使用基本的Java类(Map, String,等)来构建数据模型了。在内部, 模板中可用的变量都是实现了freemarker.template.TemplateModel接口的Java对象。但在数据模型中, 可以使用基本的Java集合类作为变量, 因为这些变量会在内部被替换为适当的TemplateModel类型。这种功能特性被称作是对象包装。2. 对象包装功能可以透明地把任何类型的对象转换为实现了TemplateModel接口类型的实例。3. 包装(转换)这些对象, 需要使用合原创 2021-06-08 18:37:34 · 424 阅读 · 0 评论 -
017_指令
一. assign指令1. 使用该指令你可以创建一个新的变量或者替换一个已经存在的变量。2. 语法...原创 2021-06-06 17:30:58 · 331 阅读 · 0 评论 -
016_循环变量内建函数
1. 循环变量内建函数counter、has_next、index、is_even_item、is_first、is_last、is_odd_item、item_cycle、item_parity和item_parity_cap只能用于list和items指令的循环变量。2. index2.1. 返回当前迭代(由循环变量名称识别)从0开始的索引。<#list ['a', 'b', 'c', 'd'] as word> ${word?index}: ${word}<br /&原创 2021-06-04 17:40:07 · 199 阅读 · 1 评论 -
015_插值
1. 插值的使用格式是: ${expression}, 这里的expression可以是所有种类的表达式(比如: ${100 + x})。2. 插值是用来给表达式插入具体值然后转换为文本(字符串)。插值仅仅可以在两种位置使用: 在文本区(比如: <h1>Hello ${name}!</h1>)和字符串表达式(比如: <#include "/footer/${company}.html">)中。3. ${expression}表达式的结果必须是字符串, 数字或者日期原创 2021-06-04 15:20:39 · 356 阅读 · 0 评论 -
014_哈希表内建函数
1. keys1.1. 一个包含哈希表中查找到的键的序列。请注意, 并不是所有的哈希表都支持这个(询问程序员一个指定的哈希表是否允许这么操作)。2. values2.1. 一个包含哈希表中子变量的序列。注意并不是所有的哈希表都支持这个(询问程序员一个指定的哈希表是否允许这么操作)。4. sort_by4.1. 返回由给定的哈希表子变量来升序排序的哈希表序列。(要降序排列使用该内建函数后还要使用reverse内建函数。)这个规则和sort内建函数是一样的, 除了序列中的子变量必须是哈希表类原创 2021-05-31 23:27:33 · 163 阅读 · 1 评论 -
013_序列内建函数
1. chunk1.1. 该内建函数将序列分隔为多个序列, 长度为第一个参数给定的值(比如: mySeq?chunk(3))。结果是包含这些序列的一个序列。最后一个序列可能比给定的长度要小, 除非第二个参数也给定了(比如: mySeq?chunk(3, '-')), 这就是用来填充最后一个序列, 以达到给定的长度。1.2. 该内建函数通常在输出的序列中使用表格/柱状的格式。当被用于html表格时, 第二个参数通常是"\xA0"(也就是不换行的空格代码, 也就是我们所知的"nbsp"), 所以空td.原创 2021-05-31 23:24:58 · 224 阅读 · 0 评论 -
012_日期内建函数
1. date, time, datetime(当用于日期/时间/日期-时间值时)1.1. date:仅日期部分, 没有一天当中的时间部分。1.2. time:仅一天当中的时间部分, 没有日期部分。1.3. datetime:日期和时间都在。1.4. 在最佳情况下, 你不需要使用这些内建函数。不幸的是, 由于Java平台上的技术限制, FreeMarker有时不能发现日期中的哪一部分在使用; 询问程序员哪些变量会有这个问题。如果FreeMarker 不得不执行需要这些信息的操作 --比如用文原创 2021-05-31 23:21:35 · 159 阅读 · 1 评论 -
011_布尔值内建函数
1. c(当用于布尔值时)1.1. 该内建函数将布尔值转换为字符串, 针对"计算机语言"而不是用户。不管boolean_format的设置是什么, 结果是"true"或"false"。2. then2.1. 使用于booleanExp?then(whenTrue, whenFalse), 就像是类C语言中的三元运算符(也就是说, booleanExp ? whenTrue : whenFalse)。如果booleanExp评估为布尔值true, 那么就评估并返回第一个参数, 而若booleanE原创 2021-05-31 23:19:03 · 189 阅读 · 1 评论 -
010_数字内建函数
1. abs1.1. 给出数字的绝对值。2. c(当被用作是数字值时)2.1. 该内建函数将"计算机语言"的数字转换成字符串, 这都是对计算机来说的, 而不是对用户。也就是说, 它根据程序语言的用法来进行格式化, 这对于FreeMarker的所有本地数字格式化设置来说是独立的。它通常使用点来作为小数分隔符, 而且它从来不用分组分隔符(像3,000,000)。3. lower_abc3.1. 将1, 2, 3等..., 转换为字符串"a", "b", "c"等...当到达"z"时, 那么会原创 2021-05-31 23:16:21 · 591 阅读 · 2 评论 -
009_字符串内建函数
1. 内建函数就像FreeMarker在对象中添加的方法一样。要防止和实际方法和其它子变量的命名冲突, 则不能使用点(.), 这里使用问号(?)来和父对象分隔开。2. 为了简洁, 如果方法没有参数, 那么就可以忽略(), 比如: 想要获取path的长度, 就可以写作: path?length, 而不是path?length()。3. 内建函数关键性的另外一个原因是FreeMarker不会暴露对象的Java API。尽管Java的String类有length()方法, 但在模板中却是不可见的, 就不得原创 2021-05-31 23:13:26 · 379 阅读 · 1 评论 -
008_setting指令
1. setting指令为进一步的处理而设置。设置是影响FreeMarker行为的值。<#setting name=value />, name: 设置的名称, 不是表达式。value: 设置的新值, 是表达式。2. locale: 输出的本地化(语言)。它可以影响数字, 日期等显示格式。它的值是由语言编码(小写两个字母的ISO-639编码)和可选的国家码(大写的两个字母ISO-3166编码)组成的字符串, 它们以下划线相分隔。中文中国本地化设置<#setting locale = "原创 2021-06-03 22:47:42 · 487 阅读 · 1 评论 -
007_表达式
一. 字符串1. 在文本中确定字符串值的方法是看双引号, 比如: "some text", 或单引号, 比如: 'some text'。这两种形式是等同的。2. 如果文本自身包含用于字符引用的引号("或')或反斜杠时, 应该在它们的前面再加一个反斜杠; 这就是转义。转义允许直接在文本中输入任何字符, 也包括换行。3. 下面的表格是FreeMarker支持的所有转义字符。在字符串使用反斜杠的其他所有情况都是错误的, 运行这样的模板都会失败。...原创 2021-05-29 20:45:51 · 296 阅读 · 0 评论 -
006_基本指令
1. FTL标签1.1. 开始标签: <#directivename parameters>。1.2. 结束标签: </#directivename>。1.3. 除了标签以#开头外, 其他都和html、xml的语法很相似。1.4. 如果标签没有嵌套内容(在开始标签和结束标签之间的内容), 那么可以只使用开始标签。例如: <#include something />指令没有可嵌套的内容。2. 指令分为预定义指令(FreeMarker定义的指令, 例如:原创 2021-05-29 07:45:08 · 157 阅读 · 1 评论 -
005_FreeMarker入门程序
一. 创建Configuration实例1. 使用FreeMarker, 首先, 你应该创建一个freemarker.template.Configuration实例, 然后调整它的设置。Configuration实例是存储FreeMarker应用级设置的核心部分。同时, 它也处理创建和缓存预解析模板(比如: Template对象)的工作。2. 不需要重复创建Configuration实例; 它的代价很高, 尤其是会丢失缓存。Configuration实例就是应用级别的单例。3. 当使用多线程应原创 2021-05-28 18:06:05 · 466 阅读 · 0 评论 -
004_模板一览
1. 最简单的模板通常是普通的html文件(或者是其他任何文本文件; FreeMarker本身不属于html)。当客户端访问某个页面时, FreeMarker要发送html代码至客户端浏览器中去显示。如果想要页面动起来(这里指动态网页技术), 那么就要在html中放置能被FreeMarker所解析的特殊代码片段。2. 模板(FTL编程)是由如下部分混合而成的2.1. 文本: 文本会照着原样来输出。2.2. 插值: 这部分的输出会被计算的值来替换。插值由${and}所分隔。2.3. FTL标签原创 2021-05-28 18:01:07 · 89 阅读 · 0 评论 -
003_数据模型一览
1. 正如已经看到的, 数据模型的基本结构是树状的。 这棵树可以很复杂, 并且可以有很大的深度, 比如:原创 2021-05-27 23:48:53 · 118 阅读 · 0 评论 -
002_模板 + 数据模型 = 输出
1. 假设在一个在线商店的应用系统中需要一个html页面, 和下面这个页面类似:原创 2021-05-27 22:21:34 · 219 阅读 · 0 评论 -
001_FreeMarker介绍
1. FreeMarker是一款模板引擎: 即一种基于模板和数据, 并用来生成输出文本(HTML网页, 电子邮件, 配置文件, 源代码等)的通用工具。它是一个Java类库, 是一款程序员可以嵌入他们所开发产品的组件。2. 模板编写为FreeMarker Template Language(FTL)。它是简单的, 专用的语言, 不是像PHP那样成熟的编程语言。那就意味着要在真实编程语言中准备数据, 比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中, 你可以专注于如何展现数据, 而在模板之原创 2021-05-27 12:26:49 · 180 阅读 · 1 评论