Freemarker组件继承与重写

2019-05-11  本文已影响0人  输入昵称就行

基于spring boot starter freemarker

        <!--页面模板-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>

添加依赖

        <!--rapid-freemarker 模板继承框架-->
        <dependency>
            <groupId>com.googlecode.rapid-framework</groupId>
            <artifactId>rapid-core</artifactId>
            <version>4.0.5</version>
        </dependency>

添加配置

@Configuration
public class FreemarkerConfiguration {

    @Autowired
    freemarker.template.Configuration configuration;

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

}

使用方法

首先定义一个模板

base.ftl

<!DOCTYPE html>
<html lang="en">
<head>
    <@block name="head"></@block>
    <!-- 这是freemarker的引入 -->
    <#include "head.ftl"> 
</head>
<body>
    <@block name="body"></@block>
    <#include "foot.ftl">
</body>
</html>
然后另外一个新建一个页面

index.ftl

@override 类似vue的template

include 类似vue的组件引入

<!-- @override 就是重写 -->
<@override name="head">
    <title>Home</title>
</@override>
<@override name="body">
    <!-- 这是freemarker的继承 -->
    <#include "../component/layout.ftl">
</@override>
<!-- @extends 是继承 -->
<@extends name="../component/base.ftl"></@extends>

这样当访问index页面的时候,自动具备了base.ftl中定义的head和body等内容了,然后重写的就是block的内容

上一篇 下一篇

猜你喜欢

热点阅读