SpringBoot模板

Thymeleaf模板

关于Thymeleaf的优点,我只说一条:它就是html页面。

相关pom依赖:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

  

Spring Boot官方文档建议在开发时将缓存关闭,那就在application.properties文件中加入下面这行

正式环境还是要将缓存开启的

对应的后台代码

package com.ssm.springboot.entity;

import lombok.Data;

/**
 * @author xyls
 * @blog name & blog address 027@0030
 * @create  2019-11-26 15:33
 */
@Data
public class User {
    private Integer uid;
    private String userName;
    private String password;


    public User(Integer uid, String userName, String password) {
        this.uid = uid;
        this.userName = userName;
        this.password = password;
    }


    public User() {
    }
}

  

package com.ssm.springboot.controller;

import com.ssm.springboot.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;

/**
 * @author xyls
 * @blog name & blog address 027@0030
 * @create  2019-11-26 15:34
 */
@Controller
@RequestMapping("/thymeleaf")
public class UserController {

    @RequestMapping("/by1")

    public String by1(HttpServletRequest request) {
        request.setAttribute("msg", "传递单个字符串");
        List<User> userList = new ArrayList<>();
        userList.add(new User(1, "连斩", "117649"));
        userList.add(new User(2, "连战", "117649"));
        userList.add(new User(3, "恋栈", "117649"));
        request.setAttribute("userList", userList);
        request.setAttribute("htmlStr", "<span style='color:red'>转义HTML代码块</span>");

        return "list";
    }
}

  

前台HTML页面

  

 

 注意:

 在演示thymeleaf时,如果写了freemarker,先把application中的free marker部分先注释,不然没效果

Freemarker模板

学习网站:http://freemarker.foofun.cn/

pom依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-freemarker</artifactId>
   </dependency> 
<resources>
            <!--解决mybatis-generator-maven-plugin运行时没有将XxxMapper.xml文件放入target文件夹的问题-->
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <!--freemarker模板也读取需要注释标红地方-->
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <!--<include>*.properties</include>-->
                    <!--<include>*.xml</include>-->
                    <!--<include>*.yml</include>-->
                </includes>
            </resource>
        </resources>

 没配置的情况下是不能.ftl文件的,现在改下

list.ftl

<!DOCTYPE html> 
<html lang="en">
<head>
    <meta charset="UTF-8">

    <title>Title</title>
</head>
<body>
<h2>取值</h2>
<h3>提供默认值</h3>
welcome 【${name!'未知'}】 to freemarker!

<h3>exists用在逻辑判断</h3>
<#if name?exists>
    ${name}
</#if>

<h2>条件</h2>
<#if sex=='girl'>
		女
<#elseif sex=='boy'>
		男
<#else>
		保密
</#if>

<h2>循环</h2>
<table border="1px" width="600px">
    <thead>
    <tr>
        <td>ID</td>
        <td>角色名</td>
        <td>描述</td>
    </tr>
    </thead>
    <tbody>
    <#list roles as role>
    <tr>
        <td>${role.rid}</td>
        <td>${role.roleName}</td>
        <td>${role.desc}</td>
    </tr>
    </#list>
    </tbody>
</table>

<h2>include</h2>
<#include 'foot.ftl'>

<h2>局部变量(assign)/全局变量(global)</h2>
 <#assign ctx1>
     ${springMacroRequestContext.contextPath}
 </#assign>
sys
<#global ctx2>
    ${springMacroRequestContext.contextPath}
</#global>
${ctx1}和${ctx2}
sqs


</body>
</html>

  foot.ftl

 

底部页面
<a href="login.ftl">返回登录1</a>
<a href="${ctx}/toLogin">返回登录2</a>

  common.ftl

 

<#assign ctx>
    ${springMacroRequestContext.contextPath}
</#assign>
<base href="${ctx}/">

  相关controler层的Java代码

 

package com.ssm.springboot.controller;

import com.ssm.springboot.entity.Role;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import java.util.ArrayList;
import java.util.List;

/**
 * @author xyls
 * @blog name & blog address 027@0030
 * @create  2019-11-26 16:36
 */
@Controller
@RequestMapping("/freemarker")
public class RoleController {
    @RequestMapping("/role/list")
    public ModelAndView roleList(){
        ModelAndView mav = new ModelAndView();
        mav.setViewName("/list");

        mav.addObject("name",null);
        mav.addObject("sex","gay");
        List list = new ArrayList();
        list.add(new Role(1,"老师","教书育人"));
        list.add(new Role(2,"学生","知识改变命运"));
        mav.addObject("roles",list);

        return mav;
    }

    @RequestMapping("toLogin")
    public String toLogin(){
        return "login";
    }
}

  浏览器显示结果

 

 注意:

1、application.yml中可以配置模板存放位置的根路径、以及静态资源文件存放位置的根路径

2、${springMacroRequestContext.contextPath}:SpringBoot中获取项目名

3、不推荐使用全局变量。即便它们属于不同的命名空间, 全局变量也被所有模板共享,因为它们是被 import进来的。

4、freemarker模板也可以像jsp那样设置根路径

 <#include 'common.ftl'>

    <script src="js/xxx.js" type="text/javascript"></script>

 thymeleaf中替代jsp:include的写法

 

一种是应用一段html代码

在需要应用的地方添加(2)

 一种是包含整个html页面(1)

 

注意:

1、这里的th:replace里的路径是相对于templetes文件夹的。

2、冒号冒号前后都有空格

  freemarker:

    # 设置模板后缀名

    suffix: .ftl

    # 设置文档类型

    content-type: text/html

    # 设置页面编码格式

    charset: UTF-8

    # 设置页面缓存

    cache: false

    # 设置ftl文件路径,默认是/templates,为演示效果添加role

    template-loader-path: classpath:/templates/role

  mvc:

    static-path-pattern: /static/**

原文地址:https://www.cnblogs.com/omji0030/p/11939091.html