springboot - freemarker模板引擎相关使用_02

Freemarker 简介

FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写.
FreeMarker被设计用来生成HTMLWeb页面,特别是基于MVC模式的应用程序.
FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件,FreeMarker与Web容器无关,即在Web运行时.它并不知道Servlet或HTTP。
它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java文件等…
虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据(如下图)
springboot - freemarker模板引擎相关使用_02_第1张图片

特点

  1. 轻量级模板引擎,不需要Servlet环境就可以很轻松的嵌入到应用程序中
  2. 能生成各种文本,如html,xml,java,等
  3. 入门简单,它是用java编写的,很多语法和java相似

使用

默认扩展名为 .ftl,放在templates文件夹中,如果想改变,可以通过application配置文件中添加spring.freemarker.suffix=.html,更改后就会找.html结尾的文件模板

为什么使用Freemarker

  1. SpringBoot虽然支持jsp,但是官方不推荐使用
  2. SpringBoot官方推荐使用Thymeleaf模板引擎,但是Thymeleaf并没有Freemarker好用

Freemarker与Thymeleaf的比较

thymeleaf优点:

  1. 静态html嵌入标签属性,浏览器可以直接打开模板文件,便于前后端联调
  2. springboot官方推荐方案

thymeleaf缺点:

  1. 模板必须符合xml规范,不方便使用,js脚本必须加入/*

取值

${值/对象名.属性名},如果对象可能为null,则使用 ${值/对象名.属性名!""}双引号中可选择如果为null时显示什么内容
获得boolean需要 ${布尔值?string(“true”,“false”)},获得日期需要 ${日期值?string(“yyyy-MM-dd”)}

不被当html解析

${值/对象名.属性名?html}

在页面中自定义变量

<#assign 属性名 = 属性值>

在List集合取值

<#list 要遍历的集合名 as item>
${item} 取值

对Map集合取值

<#list map?keys as key>
${key}: ${map[key]}

if判断

<#if 条件>
条件成功后显示的内容
<#else>
上面条件不成立后显示的内容

if-else 判断

<#if 条件>
条件成功后显示的内容
<#else>
上面条件不成立后显示的内容

if-elseif-else判断

<#if 条件1>
条件1成立后显示的内容
<#elseif 条件2>
条件2成立后显示的内容
<#elseif 条件…>

<#else>
上面条件不成立后显示的内容

引入其他模板

<#include “/cc.html”>

在idea中使用freemarker

pom添加依赖(可在创建项目时添加)

		
			org.springframework.boot
			spring-boot-starter-freemarker
		
  1. 在templates下创建freemarker
    springboot - freemarker模板引擎相关使用_02_第2张图片

  2. controller
    springboot - freemarker模板引擎相关使用_02_第3张图片

  3. 在freemarker页面中引入js
    springboot - freemarker模板引擎相关使用_02_第4张图片

freemarker页面的一些使用代码

ftl页面:



    第一个freemarker页面
    
${stu1.stuDate?string("yyyy-MM-dd")} <#--时间类型取值-->
${stu1.stuSex?string("男","女")} <#--boolean类型取值-->
${stu1.stuAge!"20"} <#--如果属性是空 可以直接!默认为空,也可以!"xx" 默认为xx-->
${stu1.stuName} <#--取值-->
<#assign num = 18><#--自定义变量--> ${num}
<#list list1 as li> <#--遍历list集合--> ${li}

<#list map1?keys as key> <#--遍历map集合--> ${key}: ${map1[key]}
<#assign num1 = 18> <#if num1 < 18 > <#--判断条件 --> 你还小 <#--判断成立输出的内容--> <#else> 你成年了
<#if num1 lt 20> num1<20 <#elseif num1 gt 20> <#--注意 大于号不可以使用时,应转义 gt 小于可以使用(lt) --> num1>20 <#else> num1=18

controller层

@RestController
public class FreeController {
    @RequestMapping("toIndex")
    public ModelAndView free(){
        ModelAndView mv = new ModelAndView();
        mv.setViewName("index");
        Stu stu = new Stu();
        stu.setStuId(1);
        stu.setStuName("zxf"); 
        /*stu.setStuAge(18);*/
        stu.setStuSex(true);
        stu.setStuDate(new Date());
        mv.addObject("stu1",stu);

        List list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        mv.addObject("list1",list);

        Map map = new HashMap<>();
        map.put("a","a1");
        map.put("b","b1");
        map.put("c","c1");
        map.put("d","d1");
        map.put("e","e1");
        mv.addObject("map1",map);
        return mv;
    }
}

客户端

springboot - freemarker模板引擎相关使用_02_第5张图片

你可能感兴趣的:(java)