- 1 前提
- 2 freemarker 特性
- 3 FreeMarker环境搭建
- 4 简单demo测试创建
- 5 数据类型
- 5.1 布尔类型
- 5.2 日期类型
- 5.3 数值类型
- 5.4 字符串类型
- 5.5 字符串空值情况处理
- 5.6 sequence 类型
- 5.7 hash类型
- 6 常见指令
- 6.1 assign 自定义变量指令
- 6.2 if elseif else 逻辑判断指令
- 6.3 list遍历指令
- 6.4 marco 自定义指令
- 6.5 nested 占位指令
- 6.6 import 导入指令
- 6.7 include 包含指令
- 6.8 visit
- 6.9 Recurse
- 6.10 Fallback
- 7 运算符
1 创建maven环境
pom 文件里面配置
4.0.0 org.example FreeMarkerDemo 1.0-SNAPSHOT war FreeMarkerDemo Maven Webapp http://www.example.com UTF-8 1.8 1.8 org.freemarker freemarker 2.3.23 javax.servlet javax.servlet-api 3.0.1 FreeMarkerDemo org.apache.tomcat.maven tomcat7-maven-plugin 8080 /123
我们要告诉我们的项目,哪些是freemarker的资源,所以需要配置
4 简单demo测试创建Archetype Created Web Application freemarker freemarker.ext.servlet.FreemarkerServlet TemplatePath / default_encoding UTF-8 freemarker *.ftl
@WebServlet("/f01")
public class FreeMarker01 extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 给模板的数据
req.setAttribute("msg","hello word");
// 请求转发到指定的页面,
req.getRequestDispatcher("template/f01.ftl").forward(req,resp);
}
}
启动项目,因为已经有插件,所以直接使用maven进行启动
ftl文件里面,直接将Boolean类型的值进行展示,是会出错的,会有上面的提示;
5.3 数值类型日期格式
${createTime?date}
${createTime?time}
${createTime?datetime}
${createTime?string("yyyy/MM/dd HH:mm:ss")}
5.4 字符串类型数值类型
${age}
${num}
${avg}
<#--数字过长,会有逗号,可以这样去掉逗号--> ${num?c}
<#-- 将数值转换成货币类型--> ${num?string.currency}
<#--将数值转换为百分比的字符串--> ${avg?string.percent}
字符串类型 原数据--------转后数据5.5 字符串空值情况处理 5.6 sequence 类型
字符串截取 ${stringxx}---${stringxx?substring(0,2)}
首字母小写输出 ${stringxx}---${stringxx?uncap_first}
首字母大写输出 ${stringxx}---${stringxx?cap_first}
字母转小写输出 ${stringxx}---${stringxx?lower_case}
字母转大写输出 ${stringxx}---${stringxx?upper_case}
获取字符串长度 ${stringxx}---${stringxx?length}
是否以指定的字母开头(Boolean类型) ${stringxx}---${stringxx?starts_with("str")?string}
是否以指定的字母结尾(Boolean类型) ${stringxx}---${stringxx?ends_with("str")?string}
获取指定字符的索引 ${stringxx}---${stringxx?index_of("s")}
去除字符串前后空格 ${stringxx}---${stringxx?trim}
替换指定字符串 ${stringxx}---${stringxx?replace("s","ggg")}
6 常见指令 6.1 assign 自定义变量指令hashmap
key遍历输出:
<#list hashmap?keys as key> <#-- starts 是list,star 是遍历出来的每一个元素 --> ${key} ------${hashmap[key]}
#list>
value遍历输出:
<#list hashmap?values as value> <#-- starts 是list,star 是遍历出来的每一个元素 --> ${value}
#list>
<#--定义一个变量-->
<#assign str= "hello" >
${str}
<#--定义多个变量-->
<#assign str1="world" intx=1>
${str1}
${intx}
6.2 if elseif else 逻辑判断指令
6.3 list遍历指令简单判断
<#assign str1=10> <#if str1 lt 60>你太菜了
<#elseif str1 =60 >还好
<#else> #if>判断数据是否存在
<#assign list = ""> <#if list??> 数据存在 <#else> 数据不存在 #if>
6.4 marco 自定义指令list 指令
<#assign userslist = ["lili","huhu","yueyue"]> <#list userslist as user> ${user} #list> <#list userslist as user> 数据存在 <#else> 数组里面么有数据,走这个逻辑,避免空数据 #list>
自定义指令
6.5 nested 占位指令 6.6 import 导入指令 6.7 include 包含指令 6.8 visit自定义指令(宏)
<#--定义一个宏,相当于定义一个变量,名称是address--> <#macro address> 我是定义的变量的值 #macro> <#--使用宏-->
<@address>@address> 定义一个有参数的宏
<#macro address11 name age> 我的名字是:${name} ,年龄是:${age} #macro>
展示宏里面的东西:
<@address11 name="lili" age=5>@address11>
visit 指令是用来递归处理树的。
6.9 Recurse 6.10 Fallback 7 运算符



