zoukankan      html  css  js  c++  java
  • thymeleaf的手动渲染HTML模板

    thymeleaf的手动渲染HTML模板

    现在很多公司都在thymeleaf作为前端的显示,但是刚看了一份博客,现在还有人在不断的诟病thymeleaf的性能问题,然后听说了一个超级牛逼的叫beetl.其实就是下面这个博客

    https://my.oschina.net/xiandafu/blog/1505526?p=4

    ,然后看了看这个Beetl的东西,感觉确实很牛逼啊,但是不在今天的博客范围内,以后有机会可以试试,为什么我不写freemaker,因为我觉得语法太恶心,想当年,唉,真是往事不堪回首啊,我现在还觉得freemaker的语法恶心.....

    言归正传:下面我们来手动渲染一段html代码和一个html页面

    添加依赖:

    1.  
      <!-- Thymeleaf 模板引擎 -->
    2.  
      <dependency>
    3.  
      <groupId>org.thymeleaf</groupId>
    4.  
      <artifactId>thymeleaf</artifactId>
    5.  
      <version>3.0.9.RELEASE</version>
    6.  
      </dependency>

    1.封装一个渲染的工具类:

    1.  
      import org.thymeleaf.TemplateEngine;
    2.  
      import org.thymeleaf.context.Context;
    3.  
      import java.util.Map;
    4.  
       
    5.  
      /**
    6.  
      * @author zk
    7.  
      * @Description:
    8.  
      * @date 2018-11-14 10:34
    9.  
      */
    10.  
      public class HTMLTemplateUtils {
    11.  
       
    12.  
      private final static TemplateEngine engine=new TemplateEngine();
    13.  
       
    14.  
      /**
    15.  
      * 使用 Thymeleaf 渲染 HTML
    16.  
      * @param template HTML模板
    17.  
      * @param params 参数
    18.  
      * @return 渲染后的HTML
    19.  
      */
    20.  
      public static String render(String template,Map<String,Object> params){
    21.  
      Context context = new Context();
    22.  
      context.setVariables(params);
    23.  
      return engine.process(template,context);
    24.  
      }
    25.  
       
    26.  
      }

    2.测试:

    1.  
      public class Test {
    2.  
      public static void main(String[] args) {
    3.  
       
    4.  
      String template = "<p th:text='${title}'></p>";
    5.  
      HashMap<String, Object> map = new HashMap<>();
    6.  
      map.put("title","hello world");
    7.  
      String render = HTMLTemplateUtils.render(template, map);
    8.  
      System.out.println("渲染之后的字符串是:"+render);
    9.  
       
    10.  
      }
    11.  
      }

    这里运行后会输出:渲染之后的字符串是:<p>hello world</p>

    达到了我们想要的渲染的效果,其实就是一个字符串的替换.....

    下面我们渲染一个html文件.准备一个 example.html  放在resources下面

    1.  
      <!DOCTYPE html>
    2.  
      <html lang="en">
    3.  
      <head>
    4.  
      <meta charset="UTF-8">
    5.  
      <title>Title</title>
    6.  
      </head>
    7.  
      <body>
    8.  
      <h1 th:text="${name}">列表名称</h1>
    9.  
      <ul>
    10.  
      <li th:each="item: ${array}" th:text="${item}">条目</li>
    11.  
      </ul>
    12.  
      </body>
    13.  
      </html>

    写一个测试的类:

    1.  
      public class HTMLTest2 {
    2.  
       
    3.  
      public static void main(String[] args) throws IOException {
    4.  
      ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver();
    5.  
      //模板所在目录,相对于当前classloader的classpath。
    6.  
      resolver.setPrefix("");
    7.  
      //模板文件后缀
    8.  
      resolver.setSuffix(".html");
    9.  
      TemplateEngine engine = new TemplateEngine();
    10.  
      engine.setTemplateResolver(resolver);
    11.  
       
    12.  
      //构造上下文(Model)
    13.  
      Context context = new Context();
    14.  
      context.setVariable("name", "三国人物");
    15.  
      context.setVariable("array", new String[]{"曹操", "刘备", "孙权", "汉献帝"});
    16.  
       
    17.  
      //渲染模板
    18.  
      FileWriter writer = new FileWriter("result.html");
    19.  
      engine.process("example",context,writer);
    20.  
       
    21.  
      //这个example.html 放在resources 下面.这样机会生成一个result.html文件,结果都已经放进去了.
    22.  
       
    23.  
       
    24.  
      }
    25.  
      }

    我们这里把渲染后的结果到result.html 中

    运行程序就会生成一个result.html 内容是:

    1.  
      <!DOCTYPE html>
    2.  
      <html lang="en">
    3.  
      <head>
    4.  
      <meta charset="UTF-8">
    5.  
      <title>Title</title>
    6.  
      </head>
    7.  
      <body>
    8.  
      <h1>三国人物</h1>
    9.  
      <ul>
    10.  
      <li>曹操</li>
    11.  
      <li>刘备</li>
    12.  
      <li>孙权</li>
    13.  
      <li>汉献帝</li>
    14.  
      </ul>
    15.  
      </body>
    16.  
      </html>

    也可以手动的渲染web请求来的,下次咱们再补充上来.敬请期待

    其实渲染最后都是调用的这个方法:

    /**
     * org.thymeleaf.templateparser.ITemplateParser#parseStandalone(org.thymeleaf.IEngineConfiguration, java.lang.String, java.lang.String, java.util.Set, org.thymeleaf.templateresource.ITemplateResource, org.thymeleaf.templatemode.TemplateMode, boolean, org.thymeleaf.engine.ITemplateHandler)
     */
  • 相关阅读:
    OSPF
    【今日CS 视觉论文速览】 24 Jan 2019
    【今日CS 视觉论文速览】Wed, 23 Jan 2019
    【今日CS 视觉论文速览】 21 Jan 2019
    【Processing学习笔记】安装与入门
    【今日CS 视觉论文速览】Part2, 18 Jan 2019
    【今日CS 视觉论文速览】Fri, 18 Jan 2019
    【今日CS 视觉论文速览】Thu, 17 Jan 2019
    【今日CS 视觉论文速览】Part2, 16 Jan 2019
    【今日CS 视觉论文速览】Wed, 16 Jan 2019
  • 原文地址:https://www.cnblogs.com/yelanggu/p/13428212.html
Copyright © 2011-2022 走看看