FreeMarker 模板中的数据类型有如下几种:

  • 布尔型:等价于 java 的 Boolean,不能直接输出,需要转换成字符串
  • 日期型:等价于 java 的 Date,不能直接输出,需要转换成字符串
  • 数值型:等价于 java 中的 int、float、double 等数值类型,三种显示形式
    • 数值型(默认)
    • 货币型
    • 百分比型
  • 字符串:等价于 java 中的字符串,有很多内置函数
  • sequence类型:等价于 java 中的数组、List、Set等集合类型
  • hash类型:等价于 java 中的 Map

布尔类型

1、在 Servlet 中设置布尔类型的数据

  1. // 布尔类型
  2. request.setAttribute("flag", true);

2、获取数据

  1. <#--
  2. 布尔类型不支持直接输出,需要转换成字符串
  3. 方式一:?c
  4. 方式二:?string 或 ?string("true时文本","false时文本")
  5. -->
  6. ${flag?c}
  7. ${flag?string}
  8. ${flag?string("yes","no")}

日期类型

1、在service中设置日期类型的数据

  1. //日期类型
  2. request.setAttribute("createDate",new Date());

2、获取数据:

  1. <#-- 日期类型同样不支持直接输出,需要转换成字符串
  2. 1、年月日:?date
  3. 2、时分秒:?time
  4. 3、年月日时分秒: ?datetime
  5. 4、指定格式: ?string("自定义格式")
  6. y:年 M:月 d:日
  7. H:时 m:分 s:秒
  8. -->
  9. <#-- 输出日期 -->
  10. ${createDate?date}
  11. <#-- 输出时间格式 -->
  12. ${createDate?time}
  13. <#-- 输出日期时间格式 -->
  14. ${createDate?datetime}
  15. <#-- 输出自定义格式 -->
  16. ${createDate?string("yyyy年MM月dd日 HH:mm:ss")}

数值类

1、在service中设置日期类型的数据

  1. //数值类型
  2. request.setAttribute("age",18);
  3. request.setAttribute("salary",10000);
  4. request.setAttribute("avg",0.545);

2、获取数据:

  1. <#-- 数值类型可以直接输出
  2. 1、转字符串
  3. 普通字符串: ?c
  4. 货币型字符串: ?string.currency
  5. 百分比型字符串: ?string.percent
  6. 2、保留浮点型数值指定小数位(#表示一个小数位) ?string["0.##"]
  7. -->
  8. <#-- 直接输出数值型 -->
  9. ${age}、${salary}、${avg}
  10. <#-- 转换成字符串输出 -->
  11. ${salary?c}
  12. ${salary?string.currency}
  13. ${avg?string.percent}
  14. ${avg?string["0.##"]}

字符串

1、在Servlet中设置字符串类型的数据

  1. //字符串类型
  2. request. setAttribute ("msg", "Hel1o ")
  3. request.setAttribute ("msg2" , "freemarker");

2、获取数据

  1. <#-- 数据类型:字符串类型
  2. 在freemarker中字符串类型可以直接输出;
  3. 1.截取字符串(左闭右开) ?substring(start,end)
  4. 2·首字母小写输出 ?uncap_first
  5. 3.首字母大写输出 ?cap_first
  6. 4.字母转小写输出 ?1ower_case
  7. 5·字母转大写输出 ?upper_case
  8. 6.获取字符串长度 ?length
  9. 7.是否以指定字符开头(boolean类型) ?starts_with("xx")?string
  10. 8.否以指定字符结尾(boolean类型) ?ends—with("xx")?string
  11. 9.获取指定字符的索引 ?index_of("xx")
  12. 10.去除字符串前后空格 ?trim
  13. 11.替换指定字符串 ?replace("xx","xx")
  14. -->

空值和null值

FreeMarker 使用两个运算符来避免空值:

  • !:感叹号,指定缺失变量的默认值
    • ${ value! }:如果value为空,则默认值是空字符串
    • ${ value!”默认值” }:如果value为空,则默认值是字符串“默认值”
  • ??:判断变量是否存在,变量存在返回true,否则返回false
    • ${ (value??)?string }:将 value?? 运算结果转换成字符串输出

sequence 类型

1、在 Servlet 中设置数组、List、Set

  1. /* 序列类型 */
  2. // 数组
  3. String[] stars = new String[]{"周杰", "武则天", "仙人"};
  4. request.setAttribute("stars", stars);
  5. // 列表
  6. List<String> list = new ArrayList<>(5);
  7. list.add("世界");
  8. list.add("无线");
  9. list.add("美好");
  10. list.add("可惜");
  11. list.add("难见");
  12. request.setAttribute("list", list);
  13. // Set
  14. Set<String> sets = new HashSet<>();
  15. sets.add("集合");
  16. sets.add("元素");
  17. request.setAttribute("sets", sets);

2、获取数据:

  1. <#-- 序列类型(数组、List、Set):通过List指令输出序列
  2. <#list 序列名 as 元素名>
  3. ${元素名}
  4. </#list>
  5. 获取序列长度 ${序列名?size}
  6. 获取序列元素的下标 ${元素名?index}
  7. 获取第一个元素 ${序列名?first}
  8. 获取最后一个元素 ${序列名?last}
  9. 倒序输出 ${序列名?reverse}
  10. 升序输出 ${序列名?sort}
  11. 降序输出 ${序列名?sort?reverse}
  12. 指定字段名排序 ${序列名?sort_by("字段名")}
  13. 注:一般是javaBean集合,且对应的字段名需要提供get方法
  14. -->
  15. <#-- 对数组元素进行遍历 -->
  16. <#list stars as star>
  17. 第${star?index}条数据:${star} <br/>
  18. </#list>
  19. <#-- 对List进行遍历 -->
  20. <#list list as item>
  21. 第${item?index}条数据:${item} <br/>
  22. </#list>
  23. <#-- 对Set进行遍历 -->
  24. <#list sets as set>
  25. 第${set?index}条数据:${set} <br/>
  26. </#list>
  27. <#-- 对list进行排序输出 -->
  28. <#list list?sort as item>
  29. 第${item?index}条数据:${item} <br/>
  30. </#list>

输出结果:
image.png

对 javaBean 进行集合进行遍历:
1、在 Servlet 中创建

  1. // User
  2. public class User {
  3. private String name;
  4. private Integer age;
  5. public User() {
  6. }
  7. public User(String name, Integer age) {
  8. this.name = name;
  9. this.age = age;
  10. }
  11. // setter/getter
  12. }
  13. // 在Servlet中设置属性到请求域
  14. Set<User> users = new HashSet<>();
  15. users.add(new User("李四", 18));
  16. users.add(new User("王五", 19));
  17. request.setAttribute("users", users);

2、获取

  1. <#list users as user>
  2. ${user?index}: 用户姓名- ${user.name} - 用户年龄 - ${user.age} <br/>
  3. </#list>

3、结果
image.png

hash类型

1、在Servlet中设置 hash 类型的数据

  1. Map<String, User> map = new HashMap<>();
  2. map.put("李四", new User("李四", 12));
  3. map.put("王五", new User("王五", 85));
  4. map.put("张三", new User("张三", 17));
  5. request.setAttribute("map", map);

2、获取数据

  1. <#-- 数据类型:hash类型
  2. key遍历输出:
  3. <#list hash?keys as key>
  4. ${key} -- ${hash[key]}
  5. </#list>
  6. value遍历输出:
  7. <#list hash?values as value>
  8. ${value}
  9. </#list>
  10. -->
  11. <#list map?keys as key>
  12. ${key} : ${map[key].name} - ${map[key].age} <br/>
  13. </#list>
  14. <#list map?values as value>
  15. ${value.name} - ${value.age} <br/>
  16. </#list>