未进化的程序猿
人生最苦痛的是梦醒了无路可走。做梦的人是幸福的;倘没有看出可走的路,最要紧的是不要去惊醒他。鲁迅

一、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} &nbsp; 姓名:${user.uname} &nbsp; ${user.uage} <br>
</#list>
<br>
<#list userList?sort_by("uage") as user >
编号:${user.userId} &nbsp; 姓名:${user.uname} &nbsp; ${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>

 

 

posted on 2020-12-10 00:55  甘茂旺  阅读(711)  评论(0编辑  收藏  举报