freemarker 详细介绍
一、Freemarker初步使用
1、freemarker 介绍
FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。
可以直接在springboot 2.0中整合,使用起来 很方便。
2、创建web项目
本章还是以helloworld为例,引入freemarker。创建springboot的项目,选择需要导入的组件。
注意,因为是web程序,所以 spring web 必需要选择的
接下来,template engines 中选择 freemarker
自动会在pom中导入 下面的关键依赖项:
2、设置配置文件
在resources目录下新建application.yml,删除application.properties
然后添加下列配置项:
spring:freemarker:template-loader-path: ["classpath:/templates/"] #设置ftl文件位置,这个是默认值cache: false #设置缓存页面,默认值charset: utf-8 # 设置页面编码格式check-template-location: truecontent-type: text/html #设置文档类型expose-request-attributes: false #设定所有request的属性在merge到模板的时候,是否要都添加到model中.expose-session-attributes: false #设定所有HttpSession的属性在merge到模板的时候,是否要都添加到model中.request-context-attribute: rc #指定RequestContext属性的名.suffix: .ftl #设置模板后缀名
这里列出的是比较重要的几项。
3、添加模板
这里在 resources/templates目录下添加目录 user,在user目录下添加模板 hello.ftl。
这里简单添加如下:
<!DOCTYPE html><html lang="en"><body>
<h1>Hello Freemarker ${name}</h1>
</body></html>
4、设置controller
添加HelloController 类,然后代码如下:
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;@Controller
public class HelloController {@GetMapping(value = "/hello")public String hello(Model model){model.addAttribute("name","test");return "user/hello";}
}
运行效果如图:
需要注意的是,这里使用了 @Controller 注解,
参数中的model 表示传递到 视图层的 对象,可以封装用于传递到视图层的属性。
通过freemarker中的 最常用语法 ${}的方式,获取了封装的属性值。
二、freemarker 语法
在freemarker 模板文件中,由四个组成部分构成:
1)html文本部分,这部分不会经过freemarker计算,就是普通的html 标签或者直接的text文本,将会直接由浏览器解析后输出,比如示例 hello.ftl 中的 <html> <body>
等标记。
2)注释部分,这里说的是 freemarker的注释,freemarker的注释是 <#--...-->
格式的
3)插值部分,就是freemarker计算部分,其实就是两种格式#{}
以及${}
4)FTL指令 FreeMarker指定,和HTML标记相似,名字前加#
予以区分
前面两个就不多说了。
第三个,插值部分是用的最为广泛的部分,大多数时候都会用到${}
,这种格式叫做通用插值
而#{}
称为数字格式化插值,通常在对数字进行限制小数位置等操作时采用
我们将 controller 类稍微改造下:
@Controller
public class HelloController {@GetMapping(value = "/hello")public String hello(Model model){model.addAttribute("answer",43.2287);return "user/hello";}
}
输出一个小数。我们再改下 hello.ftl
<!DOCTYPE html><html lang="en"><body>
<h1>通用插值 </h1>
<p>${answer}</p>
<p>${answer?string}
<p>${answer?string.number}
<p>${answer?string.currency}
<p>${answer?string.percent}<h1> 数字格式化插值 </h1>
<p>#{answer;M2}</p>
<p>#{answer;m2}
<p>#{answer;m1M2}
<p>#{answer;m2M4}
</body>
说明:其中 m2:小数部分最少2位,而M2:小数部分最多2位
可以直观看到运行结果:
通过插值方式,可以支持多种格式的输出,包括表达式,内置函数、逻辑运算等各种形式,语法其实和java差不多,下面举例将各种类型的数据输出,
1、添加实体类
import java.util.ArrayList;
import java.util.List;public class UserInfo {private String name;private int age;private List<String> intersts;public UserInfo(){intersts=new ArrayList<>();}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public List<String> getIntersts() {return intersts;}public void setIntersts(List<String> intersts) {this.intersts = intersts;}
}
2、添加controller
import com.xyzh.hellofreemarker.entity.UserInfo;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;@Controller
public class HelloController {@GetMapping(value = "/hello")public String hello(Model model){UserInfo userInfo=new UserInfo();userInfo.setAge(25);userInfo.setName("adrian");userInfo.getIntersts().add("唱歌");userInfo.getIntersts().add("跳舞");userInfo.getIntersts().add("篮球");userInfo.getIntersts().add("rap");model.addAttribute("userInfo",userInfo);return "user/hello";}
}
3、在模板上设置输出内容
<!DOCTYPE html><html lang="en"><body>
<h1>个人信息 </h1>
<p>姓名:${userInfo.name}</p>
<p>年龄:${userInfo.age}</p>
<p>爱好:</p>
<#list userInfo.intersts as interst><p>${interst}</p>
</#list>
</body></html>
运行后结果:
这里可以看到,通过 ${}的形式,可以输出数字、字符串、列表多种值,这里特别说明下,
因为字段值可能为空,所以可能会造成不必要的错误,设置默认值 ${name!""} 来避免对象为空的错误。如果name为空,就以默认值(“!”后的字符)显示。
这里用到了FTL指令,下面介绍下常用的 FTL指令。
FTL指令
if 逻辑判断
<#if condition>
…
<#elseif condition2>
…
<#elseif condition3>
…
<#else>
…
</#if>
例如:将hello.ftl改为:
<!DOCTYPE html><html lang="en"><body>
<h1>个人信息 </h1>
<p>姓名:
<#if userInfo.name??>${userInfo.name}
<#else>匿名
</#if>
</p>
<p>年龄:${userInfo.age}</p>
<p><#if userInfo.age gt 30>中年<#else>青年</#if></p>
<p>爱好:</p>
<#list userInfo.intersts as interst><p>${interst}</p>
</#list>
</body></html>
这里用了两个if判断,首先判断 userinfo.name是否为空,下面的判断是判断userinfo.age是否大于30
switch (条件可为数字,可为字符串)
<#switch value>
<#case value1>
…
<#break>
<#case value2>
…
<#break>
<#default>
…
</#switch>
循环
示例如下:
<!DOCTYPE html><html lang="en"><body>
<h1>个人信息 </h1>
<p>姓名:
<#if userInfo.name??>${userInfo.name}
<#else>匿名
</#if>
</p>
<p>年龄:${userInfo.age}</p>
<p><#if userInfo.age gt 30>中年<#else>青年</#if></p>
<p>爱好:</p>
<#list userInfo.intersts as interst><p>${interst_index+"、"} ${interst}</p>
</#list>
<#list 1..4 as t>${t}
</#list>
</body></html>
这里看到,用到了两个循环,一个遍历循环,一个固定次数的循环,另外还可以看到,遍历循环中,索引 用的是${变量_index}这种方式获取。
结果如下:
freemarker 详细介绍相关推荐
- FreeMarker详细介绍
FreeMarker 1. 主要内容 2.FreeMarker概述 2.1. FreeMarker概念 FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(H ...
- 小白学习freemark的过程(代码全贴+详细介绍)
介绍 FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写 FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序 环境 学习工具 ...
- HTML页面加载和解析流程详细介绍
浏览器加载和渲染html的顺序.如何加快HTML页面加载速度.HTML页面加载和解析流程等等,在本文将为大家详细介绍下,感兴趣的朋友不要错过 浏览器加载和渲染html的顺序 1. IE下载的顺序是从上 ...
- mysql为什么要压测_mysql集群压测的详细介绍
本篇文章给大家带来的内容是关于mysql集群压测的详细介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. mysql压测 mysql自带就有一个叫mysqlslap的压力测试工具,通 ...
- php比较运算符案列,PHP实例:PHP比较运算符的详细介绍
<PHP实例:PHP比较运算符的详细介绍>要点: 本文介绍了PHP实例:PHP比较运算符的详细介绍,希望对您有用.如果有疑问,可以联系我们. 比拟运算符种类 PHP实战如同它们名称所暗示的 ...
- Tempdb数据库详细介绍
Tempdb数据库详细介绍 一.Tempdb简介 tempdb是SQLServer的系统数据库一直都是SQLServer的重要组成部分,用来存储临时对象.可以简单理解tempdb是SQLServer的 ...
- linux路由介绍,Linux的路由表详细介绍
Linux的路由表详细介绍 一 在Linux下执行route命令[root@localhost backup]# route -nKernel IP routing tableDestination ...
- pythonexcel介绍_Python 中pandas.read_excel详细介绍
Python 中pandas.read_excel详细介绍 #coding:utf-8 import pandas as pd import numpy as np filefullpath = r& ...
- 渡神纪帧数测试软件,渡神纪芬尼斯崛起配置要求高吗 渡神纪配置要求详细介绍_游侠网...
渡神纪芬尼斯崛起配置要求高吗?本作将在12月3日登陆主机和PC,很多玩家比较关心游戏的配置,这里给大家带来了渡神纪配置要求详细介绍,快来了解下吧. 渡神纪配置要求详细介绍 最低要求(720p/30 f ...
最新文章
- kafka官方文档学习笔记2--QuickStart
- tmpfs 内存文件系统
- linux中mtools工具_Linux mtools命令
- MySQL 高级 - 索引 - 索引设计原则
- 读书笔记--《MicroPython入门指南》
- count函数_计数函数Count、Counta、Countblank、Countif、Countifs技巧解读
- Kubernetes学习总结(4)——Kubernetes v1.20 重磅发布 | 新版本核心主题 主要变化解读
- mysql获取一行中多列的最大值_SQL 获取一行中多个字段的最大值
- 电子合同助力企业实现全程无纸化闭环
- 数据分析-关联规则-Apriori
- 《Scrum实战》第3次课【富有成效的每日站会】作业汇总
- 【华录杯】深度学习吸烟打电话识别
- L1-087 机工士姆斯塔迪奥 和 L1-048 矩阵A乘以B
- 记录一次在线网页加密PDF解密过程
- 挖掘Dark Sky Maps(热的要死后,疯传的一个气温地图网站)
- 25.请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字 符串。
- 最好听的男孩名字及1000个好听的女孩的名字
- 浅析加密算法五【DES密码】
- MVVM理解 ——(2)数据劫持
- Weka安装及简单应用