• FreeMarker模板开发 中StringTemplateLoader的用法


    FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。

    模板编写为FreeMarker Template Language (FTL)。它是简单的,专用的语言, 不是 像PHP那样成熟的编程语言。 那就意味着要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据。

    这种方式通常被称为 MVC (模型 视图 控制器) 模式,对于动态网页来说,是一种特别流行的模式。 它帮助从开发人员(Java 程序员)中分离出网页设计师(HTML设计师)。设计师无需面对模板中的复杂逻辑, 在没有程序员来修改或重新编译代码时,也可以修改页面的样式。

    其实FreeMarker的原理就是:模板+数据模型=输出

    在maven里面加入或者引入Jar即可

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-freemarker</artifactId>
    </dependency>

    用例测试

    package com.dduweb.web.utils;
     
    import com.dduweb.common.utils.StringUtils;
    import freemarker.cache.StringTemplateLoader;
    import freemarker.template.Configuration;
     
    import java.io.StringReader;
    import java.io.StringWriter;
    import java.util.HashMap;
    import java.util.Map;
     
    /**
     * Created by Herbert 2020/4/13.
     */
    public class TestCode {
     
        public static void main(String[] args) throws Exception {
            Map<String, Object> paramMap = new HashMap<String, Object>();
            paramMap.put("name", "Brady");
            String templateContent="hello ${name}!";
            System.out.println(TestCode.parseContent(templateContent,paramMap));
        }
     
        private static String parseContent(String content,Map<String, Object> dataMap) {
            try {
                String tempname = StringUtils.hashKeyForDisk(content);
                Configuration configuration = new Configuration();
                configuration.setNumberFormat("#");
                StringTemplateLoader stringLoader = new StringTemplateLoader();
                stringLoader.putTemplate(tempname, content);
                freemarker.template.Template template = new freemarker.template.Template(tempname, new StringReader(content));
                StringWriter stringWriter = new StringWriter();
                template.process(dataMap, stringWriter);
                configuration.setTemplateLoader(stringLoader);
                content = stringWriter.toString();
            }catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException("模板解析失败");
            }
            return content;
        }
    }

    运行后输出:

     

  • 相关阅读:
    根据当前日期转目的国地区时间戳
    时间戳转换作用域问题
    字符串拼接问题
    input全选和取消全选
    循环遍历渲染模块
    jQuery实现获取选中复选框的值
    React组件
    underscore.js依赖库函数分析二(查找)
    underscore.js依赖库函数分析一(遍历)
    React入门
  • 原文地址:https://www.cnblogs.com/zhaixingzhu/p/12731652.html
Copyright © 2020-2023  润新知