【FreeMarker】02 数据类型 Part1

1、布尔,需要转换字符串才能被模板渲染

2、日期,需要转换字符串才能被模板渲染

3、数值,渲染形式分为三种,数值,货币,百分比

4、字符,内置了工具函数

5、队列,渲染Java数组集合等类型

6、哈希,渲染Java的Map类型

 

一、布尔类型

package cn.zeal4j.servlet.freemarker;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author Administrator
 * @file IntelliJ IDEA FreeMarker
 * @create 2020 09 21 11:21
 */
@WebServlet("fm-02")
public class FtlServlet02 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setAttribute("flag", true);
        req.getRequestDispatcher("freemarker-templates/fmt-02.ftl").forward(req, resp);
    }
}

模板代码:

<h5>Boolean</h5>
${flag}

访问Servlet直接报错

模板不支持类型转换,可以使用?C的方式转换为字符串进行渲染

更改之后:

<h5>Boolean</h5>
${flag?c}

还支持自定义的返回的字符串

<h5>Boolean</h5>
<p>使用?c的方式 -> ${flag?c}</p>
<p>使用?string(自定义字符串1,自定义字符串2)的方式 -> ${flag?string("yes you are !", "no offcourse not !")}</p>

也可以直接使用string

<p>使用?string的方式 -> ${flag?string}</p>

打印:

使用?string的方式 -> true

FreeMarker 2.3.23版本支持then函数,类似string(true-content, false-content)一样

<p>使用?then的方式 -> ${flag?then("okey donkey", "no way")}</p>

打印:

使用?then的方式 -> okey donkey

二、日期类型

package cn.zeal4j.servlet.freemarker;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;

/**
 * @author Administrator
 * @file IntelliJ IDEA FreeMarker
 * @create 2020 09 21 11:21
 */
@WebServlet("fm-02")
public class FtlServlet02 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setAttribute("flag", true);
        req.setAttribute("today", new Date());
        req.getRequestDispatcher("freemarker-templates/fmt-02.ftl").forward(req, resp);
    }
}

模板代码:

<h5>Date & Time</h5>
<p>直接输出 ${today} </p>

同样的也是不支持的 【注意模板foo的名称,不要和一些函数名称或者变量名称同名】

支持下面这些方式:

<h5>Date & Time</h5>
<p>输出年月日 -> ${today?date} </p>
<p>输出时分秒 -> ${today?time} </p>
<p>输出全部 -> ${today?datetime } </p>

除此之外也支持自定义格式

<p>输出自定义格式 -> ${today?string("yyyy年 - MM月 - dd日 HH时 : mm分 : ss秒")} </p>

打印:

输出自定义格式 -> 2020年 - 09月 - 21日 11时 : 45分 : 27秒

参考手册地址:

http://freemarker.foofun.cn/ref_directive_function.html

三、数值类型

请求域数据:

req.setAttribute("IntegerNumber", 100);
req.setAttribute("FloatNumber", 100.233F);

模板:

<h3>Number</h3>
<p>整数 ${IntegerNumber} </p>
<p>浮点 ${FloatNumber} </p>

效果:可以直接打印

转字符串

<hr>
<p>整数[转换为字符输出] ${IntegerNumber?c} </p>
<p>浮点[转换为字符输出] ${FloatNumber?c} </p>

货币修饰

<hr>
<p>整数[货币修饰] ${IntegerNumber?string.currency} </p>
<p>浮点[货币修饰] ${FloatNumber?string.currency} </p>

百分比转换

<hr>
<p>整数[百分比] -> ${IntegerNumber?string.percent} </p>
<p>浮点[百分比] -> ${FloatNumber?string.percent} </p>

指定小数位输出:【支持四舍五入】

<hr>
<p>浮点[自定义小数位保留,仅浮点有效] -> ${FloatNumber?string["0.######"]} </p>

四、字符串类型:

不赘述了

五、空值处理

FreeMarker不允许请求域值为NULL的情况,或者是不存在此请求域

<h3>NULL Handle</h3>
<p>渲染一个没有的请求域数据 ${unknow} </p>

或者是存NULL的渲染

req.setAttribute("nullValue", null);

模板:

<h3>NULL Handle</h3>
<#--<p>渲染一个没有的请求域数据 ${unknow} </p>-->
<p>渲染一个NULL的请求域数据 ${nullValue} </p>

但是空字符串是允许的

req.setAttribute("emptyValue", "");

模板:

<h3>NULL Handle</h3>
<#--<p>渲染一个没有的请求域数据 ${unknow} </p>-->
<p>渲染一个Empty的请求域数据 ${emptyValue} </p>

FreeMarker判NULL处理:

<p>渲染不存在或者值为NULL的数据时,加上!就不会报错了,显示则为空 ${notExist!}</p>

或者是显示指定字符串

<p>渲染不存在或者值为NULL的数据时,加上!和要输出的字符串,显示定义的字符串 -> ${stillNotExist!"该内容不存在!!!"}</p>

 

posted @ 2020-09-21 12:13  emdzz  阅读(225)  评论(0)    收藏  举报