springboot使用Freemarker支持模版继承

springboot使用Freemarker支持模版继承

  1. Freemarker继承介绍

Freemarker 通过 rapid java实现继承。实际是rapid的jar包提供的三个自定义标签。实现继承用到的有三个标签:@extends,@block ,@override.
他们三个都有一个共同的属性: name

@extend标签: 要继承的模板

@block 标签: 声明在一个模板中定义那些代码是可以被重写的(@ovrride)

@override标签: 选择要重写的代码块

  1. 依赖配置

我选择的是maven的依赖

    
    <dependency>
        <groupId>com.googlecode.rapid-frameworkgroupId>
        <artifactId>rapid-coreartifactId>
        <version>4.0.5version>
    dependency>
    
    <dependency>  
      <groupId>commons-langgroupId>  
      <artifactId>commons-langartifactId>  
      <version>2.6version>  
    dependency>

3.Freemarker配置
在application.yml的配置:

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

在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;
/**
 * @Author LiuYinXin
 * Created at 2017/5/2.21:21.
 */
@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());
    }
}

注意:再写freemarker.template.Configuration configuration;这里引入会提示报错但是不会影响
springboot使用Freemarker支持模版继承_第1张图片

4 模板继承
创建父模板base.ftl


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

创建son.ftl

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

<@override name="body">  
    子模版的 body  
@override>  

<@extends name="base.ftl"/>  

你可能感兴趣的:(java)