一、FreeMarker 数据类型
1、Freemarker 模板中的数据类型由如下几种:
布尔型:等价于 Java 的 Boolean 类型,不同的是不能直接输出,可转换为字符串输出
日期型:等价于 java 的 Date 类型,不同的是不能直接输出,需要转换成字符串再输出
数值型:等价于 java 中的 int,float,double 等数值类型
有三种显示形式:数值型(默认)、货币型、百分比型
字符型:等价于 java 中的字符串,有很多内置函数
sequence 类型:等价于 java 中的数组,list,set 等集合类型
hash 类型:等价于 java 中的 Map 类型
2、布尔类型
1)、 在Servlet中设置布尔类型的数据
// 布尔类型 request.setAttribute("flag", true);
2)、 获取数据
<#-- FreeMarker 数据类型 布尔类型 在freemarker页面中不能直接输出,如果要输出需要转换成字符串 方式一: ?c 方式二: ?string 或 ?string('为true时显示的内容','为false时显示的内容') --> <h5>布尔类型</h5> ${flag?c} <br> ${flag?string} <br> ${flag?string('yes','no')} <br> ${flag?string('喜欢','不喜欢')} <br>
3、日期类型
1)、在Servlet中设置日期类型的数据
// 日期类型 request.setAttribute("createDate",new Date());
2)、获取数据
<#-- FreeMarker 数据类型 日期类型 在freemarker中日期类型不能直接输出,需要转换成日期型或字符串 1. 年月日 ?date 2. 时分秒 ?time 3. 年月日时分秒 ?datetime 4. 自定义格式 ?string("自定义") y:年 M:月 d:日 H:时 m:分 s:秒 --> <hr> <h5>日期类型</h5> ${createDate?date} <br> ${createDate?time} <br> ${createDate?datetime} <br> ${createDate?string("yyyy/MM/dd HH:mm:ss")} <br>
4、数值类型
1)、在Servlet设置数值型的数据
// 数值类型 request.setAttribute("age",18); // 数值型 request.setAttribute("salary",10000); // 数值型 request.setAttribute("avg",0.545); // 浮点型
2)、获取数据
<#-- FreeMarker 数据类型 数值类型 在freemarker中数值类型可以直接输出; 1. 转字符串 普通字符串 ?c 货币型字符串 ?string.currency 百分比型字符串 ?string.percent 2. 浮点型的数值转换成指定小数位输出 (#表示小数位) ?string["0.##"] (保留两位) --> <h5>数值类型</h5> ${age} <br> ${num} <br> ${avg} <br> <#-- 将数值转换成字符串类型 --> ${num?c} <br> <#-- 将数值转换成货币类型字符串 --> ${num?string.currency} <br> <#-- 将数值转换成百分比类型的字符串 --> ${avg?string.percent} <br> <#-- 将浮点型的数值转换成指定小数位输出 --> ${avg?string["0.##"]}<br>
5、字符串空值情况处理
1)、在Service设置数值型的数据
// 空数据 req.setAttribute("str1",null); req.setAttribute("str2","");
2)、获取数据
<#-- 空值处理 FreeMarker 提供两个运算符来避免空值: ① ! :指定缺失变量的默认值 ${value!}:如果value值为空,则默认值是空字符串 ${value!"默认值"}:如果value值为空,则默认值是字符串"默认值" ② ?? :判断变量是否存在 如果变量存在,返回 true,否则返回 false ${(value??)?string} --> <#-- 不存在的值,报错 --> <#--${aa}--> <#-- 值为null的数据 --> <#--${str1} <br>--> <#-- 值为空字符串的数据 --> ${str2} <br> <#-- ① ! :指定缺失变量的默认值 --> ${str1!} <br> <#--如果value值为空,则默认值是空字符串--> ${str1!"str1的数据不存在"} <br> <#--如果value值为空,则默认值是字符串"默认值"--> <#-- ② ?? :判断变量是否存在 --> ${(str1??)?string}
6、sequence 类型
1)、 在Servlet中设置序列类型的数据
// 序列类型 (数组、List、Set) // 数组操作 String[] stars = new String[]{"周杰伦","林俊杰","陈奕迅","五月天"}; request.setAttribute("stars",stars); // List操作 List<String> citys = Arrays.asList("上海","北京","杭州","深圳"); request.setAttribute("cityList",citys); // JavaBean集合 List<User> userList = new ArrayList<>(); userList.add(new User(1,"zhangsan",22)); userList.add(new User(2,"lisi",18)); userList.add(new User(3,"wangwu",20)); request.setAttribute("userList",userList);
2)、获取数据
<#-- FreeMarker 数据类型 序列类型(数组、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> 获取序列的长度:${stars?size} <br> 获取第一个元素:${stars?first} <br> 获取最后一个元素: ${stars?last} <br> <hr> <#-- List操作 --> <#list cityList as city> ${city} </#list> <br> <#--倒序输出 序列名?reverse--> <#list cityList?reverse as city> ${city} </#list> <br> <#--升序输出 序列名?sort--> <#list cityList?sort as city> ${city} </#list> <br> <#--降序输出 序列名?sort?reverse--> <#list cityList?sort?reverse as city> ${city} </#list> <br> <hr> <#list userList as user > 编号:${user.userId} 姓名:${user.uname} ${user.uage} <br> </#list> <br> <#list userList?sort_by("uage") as user > 编号:${user.userId} 姓名:${user.uname} ${user.uage} <br> </#list> <br> <hr>
7、hash 类型
1)、在Servlet中设置hash类型的数据
// Map操作 Map<String,String> cityMap = new HashMap<>(); cityMap.put("sh","上海"); cityMap.put("bj","北京"); cityMap.put("sz","深圳"); request.setAttribute("cityMap",cityMap);
2)、获取数据
<#-- 数据类型:hash类型 key遍历输出 <#list hash?keys as key> ${key} -- ${hash[key]} </#list> value遍历输出 <#list hash?values as value> ${value} </#list> --> <#-- key遍历输出 --> <#list cityMap?keys as key> ${key} -- ${cityMap[key]} <br> </#list> <#-- value遍历输出 --> <#list cityMap?values as value> ${value} | </#list>