1. 程式人生 > >SpringBoot使用Freemarker支援模板繼承

SpringBoot使用Freemarker支援模板繼承

1.使用模板繼承的基本標籤

@extends,@block ,@override.
他們三個都有一個共同的屬性: name
@extend標籤: 要繼承的模板
@block 標籤: 宣告在一個模板中定義那些程式碼是可以被重寫的(@ovrride)
@override標籤: 選擇要重寫的程式碼塊

 2.依賴配置

    <!--rapid-framework 模板繼承框架-->
    <dependency>
        <groupId>com.googlecode.rapid-framework</groupId>
        <artifactId>rapid-core</artifactId>
        <version>4.0.5</version>
    </dependency>
    <!-- lang包 缺少的話可能會報錯  -->
    <dependency>  
      <groupId>commons-lang</groupId>  
      <artifactId>commons-lang</artifactId>  
      <version>2.6</version>  
    </dependency>

 3.Freemarker配置 -> 在yml檔案中的配置

spring:
  freemarker:
    charset: UTF-8
    check-template-location: true
    template-loader-path: classpath:/templates

4.在java中的配置,通過@Configuration註解建立配置類.(這裡不配置,標籤則不能使用)

import cn.org.rapid_framework.freemarker.directive.BlockDirective;
import cn.org.rapid_framework.freemarker.directive.ExtendsDirective;
import cn.org.rapid_framework.freemarker.directive.OverrideDirective;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FreemarkerConfig {
    @Autowired
    freemarker.template.Configuration configuration;

    @PostConstruct
    public void setSharedVariable(){
        configuration.setSharedVariable("block", new BlockDirective());
        configuration.setSharedVariable("override", new OverrideDirective());
        configuration.setSharedVariable("extends", new ExtendsDirective());
    }
}

5.模板繼承

(1)建立父模板layout.ftl

<!DOCTYPE html>
<html lang="en">  
<head>  
    <meta charset="utf-8"/> 
    <title>
        <@block name="title" >父模板的 title</@block>
    </title>  
</head>  
<body>  
    <div>  
        <h3>
            <@block name="body" >父模板的 body</@block>
        </h3>  
    </div>  
</body>  
</html>

(2) 建立子模板son.ftl

<@override name="title">   
    子模版的 title  
</@override>  

<@override name="body">  
    子模版的 body  
</@override>  
<!--繼承的模板要寫在最下面-->
<@extends name="layout.ftl"/>  

6.完成.