FreeMarker 模板中的数据类型有如下几种:
- 布尔型:等价于 java 的 Boolean,不能直接输出,需要转换成字符串
- 日期型:等价于 java 的 Date,不能直接输出,需要转换成字符串
- 数值型:等价于 java 中的 int、float、double 等数值类型,三种显示形式
- 数值型(默认)
- 货币型
- 百分比型
- 字符串:等价于 java 中的字符串,有很多内置函数
- sequence类型:等价于 java 中的数组、List、Set等集合类型
- hash类型:等价于 java 中的 Map
布尔类型
1、在 Servlet 中设置布尔类型的数据
// 布尔类型
request.setAttribute("flag", true);
2、获取数据
<#--
布尔类型不支持直接输出,需要转换成字符串
方式一:?c
方式二:?string 或 ?string("true时文本","false时文本")
-->
${flag?c}
${flag?string}
${flag?string("yes","no")}
日期类型
1、在service中设置日期类型的数据
//日期类型
request.setAttribute("createDate",new Date());
2、获取数据:
<#-- 日期类型同样不支持直接输出,需要转换成字符串
1、年月日:?date
2、时分秒:?time
3、年月日时分秒: ?datetime
4、指定格式: ?string("自定义格式")
y:年 M:月 d:日
H:时 m:分 s:秒
-->
<#-- 输出日期 -->
${createDate?date}
<#-- 输出时间格式 -->
${createDate?time}
<#-- 输出日期时间格式 -->
${createDate?datetime}
<#-- 输出自定义格式 -->
${createDate?string("yyyy年MM月dd日 HH:mm:ss")}
数值类
1、在service中设置日期类型的数据
//数值类型
request.setAttribute("age",18);
request.setAttribute("salary",10000);
request.setAttribute("avg",0.545);
2、获取数据:
<#-- 数值类型可以直接输出
1、转字符串
普通字符串: ?c
货币型字符串: ?string.currency
百分比型字符串: ?string.percent
2、保留浮点型数值指定小数位(#表示一个小数位) ?string["0.##"]
-->
<#-- 直接输出数值型 -->
${age}、${salary}、${avg}
<#-- 转换成字符串输出 -->
${salary?c}
${salary?string.currency}
${avg?string.percent}
${avg?string["0.##"]}
字符串
1、在Servlet中设置字符串类型的数据
//字符串类型
request. setAttribute ("msg", "Hel1o ")
request.setAttribute ("msg2" , "freemarker");
2、获取数据
<#-- 数据类型:字符串类型
在freemarker中字符串类型可以直接输出;
1.截取字符串(左闭右开) ?substring(start,end)
2·首字母小写输出 ?uncap_first
3.首字母大写输出 ?cap_first
4.字母转小写输出 ?1ower_case
5·字母转大写输出 ?upper_case
6.获取字符串长度 ?length
7.是否以指定字符开头(boolean类型) ?starts_with("xx")?string
8.否以指定字符结尾(boolean类型) ?ends—with("xx")?string
9.获取指定字符的索引 ?index_of("xx")
10.去除字符串前后空格 ?trim
11.替换指定字符串 ?replace("xx","xx")
-->
空值和null值
FreeMarker 使用两个运算符来避免空值:
- !:感叹号,指定缺失变量的默认值
- ${ value! }:如果value为空,则默认值是空字符串
- ${ value!”默认值” }:如果value为空,则默认值是字符串“默认值”
- ??:判断变量是否存在,变量存在返回true,否则返回false
- ${ (value??)?string }:将 value?? 运算结果转换成字符串输出
sequence 类型
1、在 Servlet 中设置数组、List、Set
/* 序列类型 */
// 数组
String[] stars = new String[]{"周杰", "武则天", "仙人"};
request.setAttribute("stars", stars);
// 列表
List<String> list = new ArrayList<>(5);
list.add("世界");
list.add("无线");
list.add("美好");
list.add("可惜");
list.add("难见");
request.setAttribute("list", list);
// Set
Set<String> sets = new HashSet<>();
sets.add("集合");
sets.add("元素");
request.setAttribute("sets", sets);
2、获取数据:
<#-- 序列类型(数组、List、Set):通过List指令输出序列
<#list 序列名 as 元素名>
${元素名}
</#list>
获取序列长度 ${序列名?size}
获取序列元素的下标 ${元素名?index}
获取第一个元素 ${序列名?first}
获取最后一个元素 ${序列名?last}
倒序输出 ${序列名?reverse}
升序输出 ${序列名?sort}
降序输出 ${序列名?sort?reverse}
指定字段名排序 ${序列名?sort_by("字段名")}
注:一般是javaBean集合,且对应的字段名需要提供get方法
-->
<#-- 对数组元素进行遍历 -->
<#list stars as star>
第${star?index}条数据:${star} <br/>
</#list>
<#-- 对List进行遍历 -->
<#list list as item>
第${item?index}条数据:${item} <br/>
</#list>
<#-- 对Set进行遍历 -->
<#list sets as set>
第${set?index}条数据:${set} <br/>
</#list>
<#-- 对list进行排序输出 -->
<#list list?sort as item>
第${item?index}条数据:${item} <br/>
</#list>
输出结果:
对 javaBean 进行集合进行遍历:
1、在 Servlet 中创建
// User
public class User {
private String name;
private Integer age;
public User() {
}
public User(String name, Integer age) {
this.name = name;
this.age = age;
}
// setter/getter
}
// 在Servlet中设置属性到请求域
Set<User> users = new HashSet<>();
users.add(new User("李四", 18));
users.add(new User("王五", 19));
request.setAttribute("users", users);
2、获取
<#list users as user>
${user?index}: 用户姓名- ${user.name} - 用户年龄 - ${user.age} <br/>
</#list>
3、结果
hash类型
1、在Servlet中设置 hash 类型的数据
Map<String, User> map = new HashMap<>();
map.put("李四", new User("李四", 12));
map.put("王五", new User("王五", 85));
map.put("张三", new User("张三", 17));
request.setAttribute("map", map);
2、获取数据
<#-- 数据类型:hash类型
key遍历输出:
<#list hash?keys as key>
${key} -- ${hash[key]}
</#list>
value遍历输出:
<#list hash?values as value>
${value}
</#list>
-->
<#list map?keys as key>
${key} : ${map[key].name} - ${map[key].age} <br/>
</#list>
<#list map?values as value>
${value.name} - ${value.age} <br/>
</#list>