一、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 详细介绍相关推荐

  1. FreeMarker详细介绍

    FreeMarker 1. 主要内容 2.FreeMarker概述 2.1. FreeMarker概念 FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(H ...

  2. 小白学习freemark的过程(代码全贴+详细介绍)

    介绍 FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写 FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序 环境 学习工具 ...

  3. HTML页面加载和解析流程详细介绍

    浏览器加载和渲染html的顺序.如何加快HTML页面加载速度.HTML页面加载和解析流程等等,在本文将为大家详细介绍下,感兴趣的朋友不要错过 浏览器加载和渲染html的顺序 1. IE下载的顺序是从上 ...

  4. mysql为什么要压测_mysql集群压测的详细介绍

    本篇文章给大家带来的内容是关于mysql集群压测的详细介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. mysql压测 mysql自带就有一个叫mysqlslap的压力测试工具,通 ...

  5. php比较运算符案列,PHP实例:PHP比较运算符的详细介绍

    <PHP实例:PHP比较运算符的详细介绍>要点: 本文介绍了PHP实例:PHP比较运算符的详细介绍,希望对您有用.如果有疑问,可以联系我们. 比拟运算符种类 PHP实战如同它们名称所暗示的 ...

  6. Tempdb数据库详细介绍

    Tempdb数据库详细介绍 一.Tempdb简介 tempdb是SQLServer的系统数据库一直都是SQLServer的重要组成部分,用来存储临时对象.可以简单理解tempdb是SQLServer的 ...

  7. linux路由介绍,Linux的路由表详细介绍

    Linux的路由表详细介绍 一 在Linux下执行route命令[root@localhost backup]# route -nKernel IP routing tableDestination ...

  8. pythonexcel介绍_Python 中pandas.read_excel详细介绍

    Python 中pandas.read_excel详细介绍 #coding:utf-8 import pandas as pd import numpy as np filefullpath = r& ...

  9. 渡神纪帧数测试软件,渡神纪芬尼斯崛起配置要求高吗 渡神纪配置要求详细介绍_游侠网...

    渡神纪芬尼斯崛起配置要求高吗?本作将在12月3日登陆主机和PC,很多玩家比较关心游戏的配置,这里给大家带来了渡神纪配置要求详细介绍,快来了解下吧. 渡神纪配置要求详细介绍 最低要求(720p/30 f ...

最新文章

  1. kafka官方文档学习笔记2--QuickStart
  2. tmpfs 内存文件系统
  3. linux中mtools工具_Linux mtools命令
  4. MySQL 高级 - 索引 - 索引设计原则
  5. 读书笔记--《MicroPython入门指南》
  6. count函数_计数函数Count、Counta、Countblank、Countif、Countifs技巧解读
  7. Kubernetes学习总结(4)——Kubernetes v1.20 重磅发布 | 新版本核心主题 主要变化解读
  8. mysql获取一行中多列的最大值_SQL 获取一行中多个字段的最大值
  9. 电子合同助力企业实现全程无纸化闭环
  10. 数据分析-关联规则-Apriori
  11. 《Scrum实战》第3次课【富有成效的每日站会】作业汇总
  12. 【华录杯】深度学习吸烟打电话识别
  13. L1-087 机工士姆斯塔迪奥 和 L1-048 矩阵A乘以B
  14. 记录一次在线网页加密PDF解密过程
  15. 挖掘Dark Sky Maps(热的要死后,疯传的一个气温地图网站)
  16. 25.请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字 符串。
  17. 最好听的男孩名字及1000个好听的女孩的名字
  18. 浅析加密算法五【DES密码】
  19. MVVM理解 ——(2)数据劫持
  20. Weka安装及简单应用

热门文章

  1. netty系列之:netty实现http2中的流控制
  2. 概率及常用概率分布的实现——计算机视觉修炼之路(零)
  3. 每日一题——L1-069 胎压监测(15)
  4. matlab交叉谱密度图如何分析,Matplotlib交叉谱密度(CSD)
  5. 使用TCS3200颜色传感器的自制Arduino色选机
  6. 深入了解重放攻击和如何防范
  7. TensorFlow 之 构建人物识别系统
  8. VCS和UVM常用编译选项
  9. IOS – OpenGL ES 像素化马赛克效果 GPUImagePixellateFilter
  10. Win7 系统更新后IE11浏览器打不开怎么办?