zoukankan      html  css  js  c++  java
  • 峰哥说技术:08Spring Boot整合FreeMarker视图

    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 语言基础+高级_1-3-Java语言高级_02-继承与多态_第1节 继承_1_继承的概述
    阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第8节 Math类_19_Math练习:小学数学真题
    阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第8节 Math类_18_数学工具类Math
    iView 实战系列教程(21课时)_1.iView 实战教程之配置篇_图片优化
    阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第7节 Arrays工具类_17_Arrays练习:字符串倒序
    阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第7节 Arrays工具类_16_数组工具类Array
    阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第6节 static静态_15_静态代码块
    阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第6节 static静态_14_静态static的内存图
    阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第6节 static静态_13_静态static关键字修饰成员方法
    阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第5节 String类_4_字符串的比较相关方法
  • 原文地址:https://www.cnblogs.com/027kgc/p/12424881.html
Copyright © 2011-2022 走看看