Spring Boot深度课程系列

峰哥说技术—2020庚子年重磅推出、战胜病毒、我们在行动

08  峰哥说技术:Spring Boot整合FreeMarker视图

前面带着大家整合了Thymeleaf视图,今天我们继续聊聊关于视图整合的话题。FreeMarker这是一个相当老牌的开源的免费的模版引擎。通过 Freemarker 模版,我们可以将数据渲染成 HTML 网页、电子邮件、配置文件以及源代码等。Freemarker 不是面向最终用户的,而是一个 Java 类库,我们可以将之作为一个普通的组件嵌入到我们的产品中。来看一张来自 Freemarker 官网的图片:

可以看到,Freemarker 可以将模版和数据渲染成 HTML 。Freemarker 模版后缀为 .ftl(FreeMarker Template Language)。FTL 是一种简单的、专用的语言,它不是像 Java 那样成熟的编程语言。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据。

实施步骤:

1)创建新的工程,并添加web和freeMarker依赖。

pom.xml中的配置如图所示:

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

2)编写Book实体类

package com.java.chapter02freemarker.entity;

public class Book {
    private Integer id;
    private String name;
    private String author;

public Book() {
    }

public Book(Integer id, String name, String author) {
        this.id = id;
        this.name = name;
        this.author = author;
    }

//getter和setter省略...
}

3)修改IndexController

package com.java.chapter02freemarker.controller;

import com.java.chapter02freemarker.entity.Book;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

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

@Controller
public class IndexController {
    @GetMapping("/index")
    public String index(Model model){
        List<Book> list=new ArrayList<>();
        Book book1=new Book(1,"罗贯中","三国演义");
        Book book2=new Book(2,"曹雪芹","红楼梦");
        Book book3=new Book(3,"吴承恩","西游记");
        Book book4=new Book(4,"施耐庵","水浒传");

list.add(book1);
        list.add(book2);
        list.add(book3);
        list.add(book4);
        model.addAttribute("books",list);
        return "index";
    }
}

4)编写index.flth模板文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <#if books??>
        <table border="1" cellspacing="1" cellpadding="1" width="500">
            <tr>
                <td>图书编号</td>
                <td>图书名称</td>
                <td>图书作者</td>
            </tr>
                <#list books as book>
                    <tr>
                        <td>${book.id}</td>
                        <td>${book.name}</td>
                        <td>${book.author}</td>
                    </tr>
                </#list>
        </table>
        <#else>
            没有记录显示
    </#if>
</body>
</html>

在上面的模板文件在中,出现了freeMarker模板的语法,最重要的是if else,for循环迭代标签的使用。认真琢磨,也比较简单,这里不过多的解释。

要说明的是.ftlh是Spring boot 2.2.0后的扩展名,之前的版本是.ftl.我们和thymeleaf一样,也需要来看详细解读一下自动配置类和属性类。按快捷键Ctrl+N,查找FreeMarkerProperties得到如下的源码。

@ConfigurationProperties(
    prefix = "spring.freemarker"
)
public class FreeMarkerProperties extends AbstractTemplateViewResolverProperties {
    public static final String DEFAULT_TEMPLATE_LOADER_PATH = "classpath:/templates/";
    public static final String DEFAULT_PREFIX = "";
    public static final String DEFAULT_SUFFIX = ".ftlh";
    private Map<String, String> settings = new HashMap();
    private String[] templateLoaderPath = new String[]{"classpath:/templates/"};
    private boolean preferFileSystemAccess = true;

//省略其他...

}

观看红色字体部分,可以清楚的看到模板的默认的路径是是类路径下面的templates,前缀名可以没有,后缀名为.ftlh。这也是我们为什么把模板文件放到resoureces下面的templates文件夹下面的原因。

最新文章

  1. linux下安装 oracle 11g
  2. CentOS 6.5 升级 PHP 到5.6
  3. mysql 行转列 和 列转行
  4. Mysql 自定义HASH索引带来的巨大性能提升----[真相篇]
  5. iOS两个框架之间的类型转换--&quot;桥接&quot;技术
  6. JS认证Exchange
  7. OpenGL 4.0 GLSL 实现 投影纹理映射(Projective Texture Mapping) (转)
  8. 小黄豆CRM软件安装
  9. JAVA多线程下,获取递增的序列号
  10. cocos2dx 字体BMFont,Atlas
  11. 雄冠条码PV系统-2016-05-17-收获
  12. rhel 6.7 离线安装docker
  13. MongoDB的Windows安装
  14. CAP 介绍及使用【视频】
  15. Linux:如何进行c++编程
  16. echarts 怎样去掉白色边框线 和怎样去除背景中的网格
  17. 洛咕 P4528 [CTSC2008]图腾
  18. nohup 不生成 nohup.out的方法
  19. dbcp2、c3p0、druid连接池的简单配置
  20. JS四种方法去除字符串最后的逗号

热门文章

  1. winform显示word、ppt和pdf,用一个控件显示
  2. 4.Redis持久化方案
  3. python后端向前台返回字节流文件
  4. ios UINavigationController 导航栏
  5. go proxy转发工作中碰到的问题
  6. 浙江省第十六届大学生ACM程序设计竞赛部分题解
  7. iOS商城demo、音乐播放器、视频通话、自定义搜索、转场动画等源码
  8. Qt HWND转QWidget
  9. Hexo快速搭建博客
  10. [LC] 257. Binary Tree Paths