美文网首页
Freemarker 加载字符串模板

Freemarker 加载字符串模板

作者: else05 | 来源:发表于2017-08-30 15:03 被阅读253次

平时使用模板都是加载模板文件,这次处理的文件是保存在数据库的字符串。
项目使用的是spring-boot和freemarker整合

  • 环境

JDK  : 1.8
框架 : Spring boot
模板 : Freemarker
  • 整合freemarker

<!--整合freemarker-->
<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
  • 使用字符串作模板

  1. 在类中注入模板配置
@Autowired
@Qualifier("freeMarkerConfiguration")
private Configuration       freemarkerConf;
  1. 核心代码
String templateContent="这是一个字符串加载的模板  ${name}";
// 新建一个字符串的模板加载器
StringTemplateLoader stringTemplateLoader = new StringTemplateLoader();
// 设置模板 ,其中
stringTemplateLoader.putTemplate("myTemplate", templateContent);
freemarkerConf.setTemplateLoader(stringTemplateLoader);

freemarkerConf.clearTemplateCache();
Template   template = freemarkerConf.getTemplate("myTemplate", "utf-8");

  • 实际应用

    private Template createTemplate(String name, String templateContent) throws IOException {
        Template template = freemarkerConf.getTemplate(name, "utf-8");

        if (template != null) {
            return template;
        }
        synchronized (this){ // 以下操作不是线程安全,要加上同步
            // 获取模板加载器
            TemplateLoader templateLoader = freemarkerConf.getTemplateLoader();
            if(templateLoader != null && templateLoader instanceof StringTemplateLoader){
                // 如果加载器已经是字符串加载器,则在原来的加载器上put一个新的模板
                ((StringTemplateLoader) templateLoader).putTemplate(name, templateContent);
                freemarkerConf.setTemplateLoader(templateLoader);
            }else{
                // 如果原来的模板加载器不是字符串的(默认是文件加载器),则新建
                StringTemplateLoader stringTemplateLoader = new StringTemplateLoader();
                stringTemplateLoader.putTemplate(name, templateContent);
                freemarkerConf.setTemplateLoader(stringTemplateLoader);
            }
            // 这里要清一下缓存,不然下面可能会获取不到模板
            freemarkerConf.clearTemplateCache();
            template = freemarkerConf.getTemplate(name, "utf-8");

            return template;
        }
    }

注意:

1. 设置好模板后要清一下缓存,否则你新保存的模板可能会获取不到!!!

2. 设置加载器为字符加载器,意味着就不能使用文件的方式读取模板了 !!!!

相关文章

  • Freemarker 加载字符串模板

    平时使用模板都是加载模板文件,这次处理的文件是保存在数据库的字符串。项目使用的是spring-boot和freem...

  • 【JavaWeb】FreeMarker快速入门

    FreeMarker Freemarker是免费开源的模板引擎技术;Freemarker脚本为Freemarker...

  • Spring Boot整合模板引擎

    一、FreeMarker模板引擎 Spring Boot支持FreeMarker模板引擎,它是在Spring MV...

  • springboot使用FreeMarker时的异常

    1、FreeMarker模板找不到 解决办法:配置FreeMarker模板位置:在 application.pro...

  • FreeMarker 基本指令 if list assign i

    FTL 标签 (FreeMarker Template Language, FreeMarker模板的语言标签),...

  • CRM项目01

    一、Freemarker FreeMarker 是一款免费的模板引擎 对比 JSP 而言,FreeMarker 性...

  • Freemarker研究

    1.1 FreeMarker介绍 1、 freemarker是一个用Java开发的模板引擎 FreeMarker是...

  • 2018-11-30

    网页静态化技术Freemarker: FreeMarker 是一个用 Java 语言编写的模板引擎,它基于模板来生...

  • 【代码审计】模板注入

    0x00 介绍 这里主要学习下 FreeMarker 模板注入,FreeMarker 是一款模板引擎,FreeMa...

  • Vue

    所有的Vue组件都是Vue的实例,在freemarker模板中定义一个 并加载打包好的/*/main.js在...

网友评论

      本文标题:Freemarker 加载字符串模板

      本文链接:https://www.haomeiwen.com/subject/ltptjxtx.html