1、freemarker的基本操作
获取template对象,这里主要是configuration类去做操作。
输出template的信息:
上面的操作就是最基本的操作freemarker,完成数据与页面的组合。将页面和数据完全的分开处理,
2、可以输出对象
3、常用指令
<#if>
<#list>:循环
<#include>:导入其他文件
<#include "/inc/top.ftl"/>
<#assign>:定义变量
4、空值的处理
freemarker对空值没有处理能力(报错),需要程序员自己处理。
两种逻辑,在为空值时可以再为空时给上默认的值(!);或者判断某个值是否为空(??)。
5、基本数据类型
数字
字符串
boolean
日期
布尔和日期都是不能直接输出的,必须转换成字符串或数字来显示。转换的操作就是(?)来实现的,在后面指定为字符串格式,否则报错。
date只能转换日期,即使写成yyyy-mm-dd hh:mm:ss也不能转换日期和时间,需要用datetime。如果纯粹转换时间,就用time。
6、字符串连接
一种是类似java的连接操作,一种是直接在freemarker中插入的方式。
7、序列和hash表
序列:这样就完成了序列的定义和输出。序列的拆分可以支持字符串的拆分,xxx(0..8)
hashmap:不能直接遍历map,因为map不是被序列化的对象。可以先取出map中的所有key来遍历keys。【字符串的key,可以用点来取值。】
8、自定义指令
通过macro来定义一个指令,这个指令可以传入参数,以空格来区分。然后通过@来调用这个自定义的指令,参数传入必须同时传入值和名称(否则报错)。
可以再定义的时候定义好初始值。
nested可以将指令中的内容输出出来,并且在指令中传递参数。注意是分号;。
9、变量
root中的变量就是从后台传入的变量;
在模型中的变量名和模板中的变量名一样的时候,如果直接${XXX}来访问,会把模板中的变量优先展示出来,而模型中的变量被隐藏了起来。为了访问模型中的变量,需要通过.globals来访问。局部变量需要通过local来定义,而不要用assign了,会产生覆盖。
10、名称空间
import和include的不同是,import可以设定名称空间,在需要访问变量时,直接通过as后的名称空间的名称来访问就可以了。
可以再定义一个变量的时候,指定这个变量所在的命名空间。
通过@命名空间来访问命名空间中的自定义指令。