springboot整合freemarker案例

1.pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.yl</groupId>
    <artifactId>freemarker</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>freemarker</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.application.properties

server.port=8080
# freemarker的配置
#HttpServletRequest中的属性是否可以覆盖controller中的model的同名项
spring.freemarker.allow-request-override=false
#HttpSession中的属性是否可以覆盖controller中的model的同名项
spring.freemarker.allow-session-override=false
# 是否开启缓存
spring.freemarker.cache=false
# 是否检查模板位置
spring.freemarker.check-template-location=true
# 模板使用的编码
spring.freemarker.charset=utf-8
# content-type的值
spring.freemarker.content-type=text/html
# 是否将HttpServletRequest中的属性添加到model中
spring.freemarker.expose-request-attributes=false
# 是否将HttpSession中的属性添加到model中
spring.freemarker.expose-session-attributes=false
# 模板的后缀
spring.freemarker.suffix=.ftlh
# 模板存放的位置
spring.freemarker.template-loader-path=classpath:/templates/

3.实体类

package com.yl.freemarker.model;

import java.io.Serializable;

/**
 * @Author: wfj
 * @Description:
 * @Date: created in 2021/9/11 22:32
 * @Version: 1.0v
 */
public class User implements Serializable {
    private int id;
    private String name;
    private int age;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    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;
    }
}

4.controller

package com.yl.freemarker.controller;

import com.yl.freemarker.model.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;

import java.util.*;

/**
 * @Author: wfj
 * @Description:
 * @Date: created in 2021/9/11 22:33
 * @Version: 1.0v
 */
@Controller
public class UserController {

    @GetMapping("/hello")
    public String hello(Model model) {
        List<User> users = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            User user = new User();
            user.setId(i);
            user.setName("xiaolan"+i);
            user.setAge(18);
            users.add(user);
        }
        Map<String,Object> map = new HashMap<>();
        map.put("name","yangl");
        map.put("age",20);
        map.put("salary",7000);
        model.addAttribute("info",map);
        model.addAttribute("sno","2020001");
        model.addAttribute("birth",new Date());
        model.addAttribute("users",users);
        return "hello";
    }
}

5.取普通变量的值

    <div>${sno}</div>

6.遍历集合

    <!--如何自定义集合并且遍历-->
    <#list ['hello','java','jq'] as x>
        <div>${x}</div>
    </#list>
    <!--创建一个存储着15数字的集合-->
    <!--方式一-->
    <#list 1..5 as x>
        <div>${x}</div>
    </#list>
    <!--方式二-->
    <#list 5..1 as x>
        <div>${x}</div>
    </#list>

    <!--集合遍历-->
   <#list users as user>
       <tr>
           <td>${user.id}</td>
           <td>${user.name}</td>
           <td>${user.age}</td>
           <!--当前元素的索引-->
           <td>${user_index}</td>
           <!--当前元素后面是否还有元素-->
           <td>${user_has_next?string('yes','no')}</td>
       </tr>
   </#list>

    <!--只取某个元素的属性-->
    <div>${users[1].age}</div>
    <!--只遍历多少条数据,比如只遍历第2到第5条数据-->
    <#list users[2..5] as user>
        <tr>
            <td>${user.id}</td>
            <td>${user.name}</td>
            <td>${user.age}</td>
        </tr>
    </#list>

7.遍历map

    <!--自定义map并且遍历-->
    <#assign usermap={"name":"小兰","age":18}>

    <!--遍历方式一:获取所有的key-->
    <#list usermap?keys as key>
        <div>${key}--${usermap[key]}</div>
    </#list>

    <!--遍历方式二:获取所有的value-->
    <#list usermap?values as value>
        <div>${value}</div>
    </#list>

7.转义,加r

  <div>${r"C:\"}</div>
    <div>${r"hello <b>vue</b>"}</div>

8.定义数值,且格式化数值

    <!--定义数值-->
    <#assign price=99>
    <!--格式化数值-->
    <!--以人民币符号开头-->
    <div>${price?string.currency}</div>
    <!--%号结尾-->
    <div>${price?string.percent}</div>

9.定义布尔运算符

    <!--定义布尔类型变量-->
    <#assign flag=true>

10.三目运算符,用内置函数string实现

   <!--三目运算符-->
    <div>${flag?string('yes','no')}</div>

11.字符串的拼接

    <div>${'hello ${sno}'}</div>
    <div>${'hello ' + sno }</div>
    <div>${sno[0]}${sno[2]}</div>
    <div>${sno[1..3]}</div>

12.集合,map的拼接

    <!--集合和map的相加拼接-->
    <!--输出1,2,3,6,8,9-->
    <#list [1,2,3]+[6,8,9] as x>
        <div>${x}</div>
    </#list>
    <#list (info+{"message":"soho"})?keys as key>
        <div>${key}</div>
    </#list>

13.算术运算符

    <!--算术运算符-->
    <div>
    <#assign num=15>
    <div>${num+10/1*7}</div>
    </div>

14.比较运算符

<!--比较运算符-->
    <!--if里面的条件成立,才显示内容-->
    <div>
    <#assign i=10>
        <!--等于-->
        <#if i = 10>i = 10</#if>
        <!--不等于-->
        <#if i != 10>i != 10</#if>
        <!--等于-->
        <#if i == 10>i == 10</#if>
        <!--大于-->
        <#if i gt 10>i gt 10</#if>
        <!--大于等于-->
        <#if i gte 10>i gte 10</#if>
        <!--小于-->
        <#if i lt 10>i lt 10</#if>
        <!--小于等于-->
        <#if i lte 10>i lte 10</#if>
    </div>

15.逻辑运算符

    <!--逻辑运算符-->
    <div>
    <#assign b=20>
       <#if (b gt 10 && b lt 100)>aaa</#if>
        <#if !(b==10)>bbb</#if>
        <#if (b == 100 || 1==1)>ccc</#if>
    </div>

16.分支语句

<!--分支语句-->
    <!--if else-->
    <div>
        <#assign score=50>
        <#if score gt 90> A
        <#elseif score gt 80>B
        <#elseif score gt 60>C
        <#else>D
        </#if>
    </div>
    <!--switch case-->
    <div>
        <#assign b=90>
        <#switch b>
            <#case 10>10<#break>
            <#case 20>20<#break>
            <#case 30>30<#break>
            <#default> 999
        </#switch>
    </div>

17.内置函数

 <!--内置函数-->
    <!--首字母大写-->
    <div>${"hello"?cap_first}</div>
    <!--字符串转小写-->
    <div>${"hello"?lower_case}</div>
    <!--字符串转大写-->
    <div>${"hello"?upper_case}</div>
    <!--去除字符串的空格-->
    <div>${" hello "?trim}</div>
    <!--类型转换-->
    <div>${3.14566?int}</div>
    <!--获取集合的大小-->
    <div>${users?size}</div>
    <!--格式化日期显示-->
    <div>${birth?string("yyyy-MM-dd")}</div>

18.如何判断某个变量为空?

    <!--判空,判断变量qq是否为空,为空不会进入代码块-->
    <!--如果不判空,会报错!-->
    <#if qq??>
        <div>qq</div>
    </#if>
    <!--防止出现空指针,可以通过如下方式加个默认值,或者空字符串也行-->
    <div>${dd!"dd"}</div>

19.如何引入其他模板

在这里插入图片描述
在这里插入图片描述

20.不解析内容

    <!--不解析内容-->
    <#noparse >
        <#include './student.ftlh'>
        <div>
            <#assign score=50>
            <#if score gt 90> A
            <#elseif score gt 80>B
            <#elseif score gt 60>C
            <#else>D
            </#if>
        </div>
    </#noparse>

21.自定义宏

在这里插入图片描述

22.导入宏,并且使用宏

在这里插入图片描述

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值