精华内容
下载资源
问答
  • Thymeleaf

    2021-02-23 18:43:07
    Thymeleaf模板引擎 Thymeleaf 应该是目前最受欢迎的模板引擎技术了,Spring Boot 官方也推荐 Java web 开发中使用该技术来替代 JSP 技术,主要由于其“原型即页面”的理念与 Spring Boot 倡导的快速开发非常契合,...

    Thymeleaf模板引擎

    Thymeleaf 应该是目前最受欢迎的模板引擎技术了,Spring Boot 官方也推荐 Java web 开发中使用该技术来替代 JSP 技术,主要由于其“原型即页面”的理念与 Spring Boot 倡导的快速开发非常契合,同时 Thymeleaf 模板引擎技术也确实拥有其他技术所不具备的优点。

    Thymeleaf 3

    Thymeleaf 于 2016 年 5 月 8 日正式发布了 thymeleaf-3.0.0.RELEASE 版本,目前的大部分项目开发过程中也是使用 Thymeleaf 3.0 及以上版本,因此在这里简单的介绍一下 Thymeleaf 3 的特性。

    • 完整的 HTML5 标记支持,全新的解析器

    • 自带多种模板模式,也可扩展支持其他模板格式。

    • 在 web 和非 web 环境(离线)下都可以正常工作

    • 对 Spring web 开发的支持非常完善

    • 独立于 Servlet API

    Thymeleaf快速上手

    新建一个项目

    • 导入thymeleaf依赖
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    

    导入约束

    • 在 resources/templates 目录新建模板文件 thymeleaf.html ,Thymeleaf 模板引擎的默认后缀名即为 html,新增文件后,首先在模板文件的 标签中导入 Thymeleaf 的名称空间
    • 导入该名称空间主要是为了 Thymeleaf 的语法提示和 Thymeleaf 标签的使用
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    

    新建一个Controller

    • 后端通过Model对象存数据
    @Controller
    public class ThymeleafController {
    
        @RequestMapping("/tc")
        public String tc(Model model){
            model.addAttribute("msg","Hello Thymeleaf");
            return "thymeleaf";
        }
    }
    

    thymeleaf.html

    • 前端通过thymeleaf语法取出数据
    • 直接打开该页面显示内容是:默认
    • 启动项目,通过请求访问内容是:Hello Thymeleaf
    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    <!--取出后端存的数据-->
    <div>
        <h2 th:text="${msg}">默认</h2>
    </div>
    
    </body>
    </html>
    

    Thymeleaf属性

    th:text 对应的是 HTML5 中的 text 属性,除 th:text 属性外,Thymeleaf 也提供了其他的标签属性来替换 HTML5 原生属性的值,属性节选如下:

    • th:background 对应 HTML5 中的背景属性
    • th:class 对应 HTML5 中的 class 属性
    • th:href 对应 HTML5 中的链接地址属性
    • th:id 和 th:name 分别对应 HTML5 中的 id 和 name 属性…
    • th:block 比较特殊,它是 Thymeleaf 提供的唯一的一个 Thymeleaf 块级元素,其特殊性在于 Thymeleaf 模板引擎在处理th:block的时候会删掉它本身,而保留其内容。

    可以使用ModelMap存放多个数据

    Thymeleaf 语法规则


    表达式语法

    • 变量表达式: ${…}
    • 选择变量表达式: *{…}
    • 信息表达式: #{…}
    • 链接 URL 表达式: @{…}
    • 分段表达式: ~{…}

    字面量

    • 字符串: ‘one text’, ‘Another one!’ …
    • 数字: 0, 34, 3.0, 12.3 …
    • 布尔值: true, false
    • Null 值: null
    • 字面量标记:one, sometext, main …

    文本运算

    • 字符串拼接: +
    • 字面量置换: |The name is ${name}|

    算术运算

    • 二元运算符: +, -, *, /, %
    • 负号(一元运算符): (unary operator): -

    布尔运算

    • 二元运算符: and, or
    • 布尔非(一元运算符): !, not

    比较运算

    • 比较: >, <, >=, <= (gt, lt, ge, le)
    • 相等运算符: ==, != (eq, ne)
    • 比较运算符也可以使用转义字符,比如大于号,可以使用 Thymeleaf 语法 gt 也可以使用转义字符>

    条件运算符

    • If-then: (if) ? (then)
    • If-then-else: (if) ? (then) : (else)
    • Default: (value) ?: (defaultvalue)

    特殊语法

    • 无操作: _

    Thymeleaf 模板引擎使用注意事项


    必须引入名称空间

    • 即使不引入以上名称空间,静态资源访问以及模板动态访问都不会报错,因此有些开发者可能会忽略这个事情。但是建议在开发过程中最好引入该名称空间,因为引入之后会有 Thymeleaf 代码的语法提示,能够提升开发效率,也减少人为造成的低级错误。
    <html lang="en" xmlns:th="http://www.thymeleaf.org"></html>
    

    禁入模板引擎

    • Thymeleaf 的默认缓存设置是通过配置文件的 spring.thymeleaf.cache 配置属性决定的,通过如上 Thymeleaf 模板的配置属性类 ThymeleafProperties 可以发现该属性默认为 true,因此 Thymeleaf 默认是使用模板缓存的,该设置有助于改善应用程序的性能,因为模板只需编译一次即可,但是在开发过程中不能实时看到页面变更的效果,除非重启应用程序,因此建议将该属性设置为 false,在配置文件中修改如下:
    spring.thymeleaf.cache=false
    

    IDEA 中通过 Thymeleaf 语法读取变量时爆红问题

    • 如下图所示,在刚开始使用 Thymeleaf 开发时可能会碰到这种问题,在模板文件中通过 Thymeleaf 语法读取变量时,该变量名称下会出现红色波浪线,也就是错误的标志。

    在这里插入图片描述

    • 只是由于 IDEA 中默认开启了表达式参数验证,即使在后端的 model 数据中添加了该变量,但是对于前端文件是无法感知的,因此会报这个错误,可以在 IDEA 中默认将验证关闭或者将提示级别修改掉也可以。
      在这里插入图片描述
    展开全文
  • thymeleaf

    2018-05-15 15:18:59
    thymeleaf TEXT MODEpublic class ThymeTemplate { private ThymeTemplate(){ } public static String merge(Map&lt;String,Object&gt; param, String template) { TemplateEngine templateEngine =...

    thymeleaf TEXT MODE

    public class ThymeTemplate {
    
    	private ThymeTemplate(){
    
    	}
    
    	public static String merge(Map<String,Object> param, String template) {
    		TemplateEngine templateEngine = getInstance();
    		Context context = new Context();
    		context.setVariables(param);
    		return templateEngine.process(template, context);
    	}
    
    
    	private static TemplateEngine getInstance() {
    		return EngineGenerator.templateEngine;
    	}
    
    	private static class EngineGenerator {
    		private static TemplateEngine templateEngine = new TemplateEngine();
    		static {
    			StringTemplateResolver cltr = new StringTemplateResolver();
    			cltr.setTemplateMode(TemplateMode.TEXT);
    			templateEngine.addTemplateResolver(cltr);
    		}
    	}
    
    }


    "C:\Program Files\Java\jdk1.8.0_144\bin\java" "-javaagent:D:\IntelliJ IDEA Community Edition 2017.2.5\lib\idea_rt.jar=65031:D:\IntelliJ IDEA Community Edition 2017.2.5\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_144\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\rt.jar;D:\gitLocal\seasnail\feature\20171019_1403053_dev_1\seasnail-web\target\test-classes;D:\gitLocal\seasnail\feature\20171019_1403053_dev_1\seasnail-web\target\classes;D:\gitLocal\seasnail\feature\20171019_1403053_dev_1\seasnail-api-server\target\classes;D:\gitLocal\seasnail\feature\20171019_1403053_dev_1\seasnail-biz\target\classes;D:\gitLocal\seasnail\feature\20171019_1403053_dev_1\seasnail-dal\target\classes;D:\m2repository\org\mybatis\generator\mybatis-generator-core\1.3.2\mybatis-generator-core-1.3.2.jar;D:\gitLocal\seasnail\feature\20171019_1403053_dev_1\seasnail-common\target\classes;D:\m2repository\org\mybatis\spring\boot\mybatis-spring-boot-starter\1.1.1\mybatis-spring-boot-starter-1.1.1.jar;D:\m2repository\org\mybatis\spring\boot\mybatis-spring-boot-autoconfigure\1.1.1\mybatis-spring-boot-autoconfigure-1.1.1.jar;D:\m2repository\org\mybatis\mybatis\3.4.0\mybatis-3.4.0.jar;D:\m2repository\org\mybatis\mybatis-spring\1.3.0\mybatis-spring-1.3.0.jar;D:\m2repository\org\springframework\boot\spring-boot-starter-jdbc\1.4.3.RELEASE\spring-boot-starter-jdbc-1.4.3.RELEASE.jar;D:\m2repository\org\apache\tomcat\tomcat-jdbc\8.5.6\tomcat-jdbc-8.5.6.jar;D:\m2repository\org\apache\tomcat\tomcat-juli\8.5.6\tomcat-juli-8.5.6.jar;D:\m2repository\org\springframework\spring-jdbc\4.3.5.RELEASE\spring-jdbc-4.3.5.RELEASE.jar;D:\m2repository\org\springframework\spring-tx\4.3.5.RELEASE\spring-tx-4.3.5.RELEASE.jar;D:\m2repository\com\alibaba\boot\pandora-hsf-spring-boot-starter\2017-11-release\pandora-hsf-spring-boot-starter-2017-11-release.jar;D:\m2repository\com\taobao\pandora\pandora-boot-starter-hsf\2017-11-release\pandora-boot-starter-hsf-2017-11-release.jar;D:\m2repository\com\taobao\pandora\pandora-boot-starter\2017-11-release\pandora-boot-starter-2017-11-release.jar;D:\m2repository\com\taobao\pandora\pandora-boot-bootstrap\2.1.7.9\pandora-boot-bootstrap-2.1.7.9.jar;D:\m2repository\com\taobao\pandora\taobao-hsf.sar-container\2017-11-release\taobao-hsf.sar-container-2017-11-release.jar;D:\m2repository\com\taobao\pandora\plugin\metrics\1.6.3\metrics-1.6.3.jar;D:\m2repository\com\taobao\pandora\plugin\pandolet\1.0.2\pandolet-1.0.2.jar;D:\m2repository\com\taobao\pandora\plugin\pandora-qos-service\2.1.6.4\pandora-qos-service-2.1.6.4.jar;D:\m2repository\com\taobao\pandora\plugin\unitrouter\1.1.3\unitrouter-1.1.3.jar;D:\m2repository\com\taobao\pandora\plugin\hsf\2.2.3.9\hsf-2.2.3.9.jar;D:\m2repository\com\taobao\pandora\plugin\diamond-client\3.8.3\diamond-client-3.8.3.jar;D:\m2repository\com\taobao\pandora\plugin\config-client\1.9.2\config-client-1.9.2.jar;D:\m2repository\com\taobao\pandora\plugin\eagleeye-core\1.6.3\eagleeye-core-1.6.3.jar;D:\m2repository\com\taobao\pandora\plugin\vipserver-client\4.6.9\vipserver-client-4.6.9.jar;D:\m2repository\com\taobao\pandora\plugin\spas-sdk-service\1.2.5\spas-sdk-service-1.2.5.jar;D:\m2repository\com\taobao\pandora\plugin\spas-sdk-client\1.2.5\spas-sdk-client-1.2.5.jar;D:\m2repository\com\alibaba\boot\pandora-hsf-spring-boot-autoconfigure\2017-11-release\pandora-hsf-spring-boot-autoconfigure-2017-11-release.jar;D:\m2repository\com\alibaba\middleware\sdk\2017-11-release\sdk-2017-11-release.jar;D:\m2repository\com\alibaba\middleware\spas-sdk-service-sdk\1.2.5--2017-11-release\spas-sdk-service-sdk-1.2.5--2017-11-release.jar;D:\m2repository\com\alibaba\middleware\metrics-sdk\1.6.3--2017-11-release\metrics-sdk-1.6.3--2017-11-release.jar;D:\m2repository\com\alibaba\middleware\vipserver-client-sdk\4.6.9--2017-11-release\vipserver-client-sdk-4.6.9--2017-11-release.jar;D:\m2repository\com\alibaba\middleware\monitor-sdk\1.2.1--2017-11-release\monitor-sdk-1.2.1--2017-11-release.jar;D:\m2repository\com\alibaba\middleware\acl.plugin-sdk\1.2.56--2017-11-release\acl.plugin-sdk-1.2.56--2017-11-release.jar;D:\m2repository\com\alibaba\middleware\notify-tr-client-sdk\3.4.0--2017-11-release\notify-tr-client-sdk-3.4.0--2017-11-release.jar;D:\m2repository\com\alibaba\middleware\spas-sdk-client-sdk\1.2.5--2017-11-release\spas-sdk-client-sdk-1.2.5--2017-11-release.jar;D:\m2repository\com\alibaba\middleware\config-client-sdk\1.9.2--2017-11-release\config-client-sdk-1.9.2--2017-11-release.jar;D:\m2repository\com\alibaba\middleware\filesync-client-sdk\1.0.8--2017-11-release\filesync-client-sdk-1.0.8--2017-11-release.jar;D:\m2repository\com\alibaba\middleware\tddl-client-sdk\5.2.2-8--2017-11-release\tddl-client-sdk-5.2.2-8--2017-11-release.jar;D:\m2repository\com\alibaba\middleware\tbsession-sdk\3.1.3.5--2017-11-release\tbsession-sdk-3.1.3.5--2017-11-release.jar;D:\m2repository\com\alibaba\middleware\hsf-notify-client-sdk\3.2.2--2017-11-release\hsf-notify-client-sdk-3.2.2--2017-11-release.jar;D:\m2repository\com\alibaba\middleware\diamond-client-sdk\3.8.3--2017-11-release\diamond-client-sdk-3.8.3--2017-11-release.jar;D:\m2repository\com\alibaba\middleware\live-profiler-pandora-sdk\1.0.3--2017-11-release\live-profiler-pandora-sdk-1.0.3--2017-11-release.jar;D:\m2repository\com\alibaba\middleware\pandora-qos-service-sdk\2.1.6.4--2017-11-release\pandora-qos-service-sdk-2.1.6.4--2017-11-release.jar;D:\m2repository\com\alibaba\middleware\ons-sdk-sdk\1.3.1--2017-11-release\ons-sdk-sdk-1.3.1--2017-11-release.jar;D:\m2repository\com\alibaba\middleware\tair-plugin-sdk\2.2.29--2017-11-release\tair-plugin-sdk-2.2.29--2017-11-release.jar;D:\m2repository\com\alibaba\middleware\rocketmq-client-sdk\4.1.2--2017-11-release\rocketmq-client-sdk-4.1.2--2017-11-release.jar;D:\m2repository\com\alibaba\middleware\switch-sdk\2.1.0.4.1--2017-11-release\switch-sdk-2.1.0.4.1--2017-11-release.jar;D:\m2repository\com\alibaba\middleware\buc.sso.client.plugin-sdk\0.9.1--2017-11-release\buc.sso.client.plugin-sdk-0.9.1--2017-11-release.jar;D:\m2repository\com\alibaba\middleware\eagleeye-core-sdk\1.6.3--2017-11-release\eagleeye-core-sdk-1.6.3--2017-11-release.jar;D:\m2repository\com\alibaba\middleware\pandora-framework-sdk\2.1.8.1--2017-11-release\pandora-framework-sdk-2.1.8.1--2017-11-release.jar;D:\m2repository\com\alibaba\middleware\alimonitor-jmonitor-sdk\1.2.5--2017-11-release\alimonitor-jmonitor-sdk-1.2.5--2017-11-release.jar;D:\m2repository\com\alibaba\middleware\pandolet-sdk\1.0.2--2017-11-release\pandolet-sdk-1.0.2--2017-11-release.jar;D:\m2repository\com\alibaba\middleware\hsf-sdk\2.2.3.9--2017-11-release\hsf-sdk-2.2.3.9--2017-11-release.jar;D:\m2repository\com\alibaba\middleware\metaq-client-sdk\4.1.4.Final--2017-11-release\metaq-client-sdk-4.1.4.Final--2017-11-release.jar;D:\m2repository\com\alibaba\middleware\mtop-uncenter-sdk\1.0.3.6--2017-11-release\mtop-uncenter-sdk-1.0.3.6--2017-11-release.jar;D:\m2repository\com\alibaba\middleware\unitrouter-sdk\1.1.3--2017-11-release\unitrouter-sdk-1.1.3--2017-11-release.jar;D:\m2repository\com\alibaba\ais\iceberg-common-util\1.2.1-SNAPSHOT\iceberg-common-util-1.2.1-20180410.091751-43.jar;D:\m2repository\commons-lang\commons-lang\2.6\commons-lang-2.6.jar;D:\m2repository\commons-beanutils\commons-beanutils\1.9.3\commons-beanutils-1.9.3.jar;D:\m2repository\commons-collections\commons-collections\3.2.2\commons-collections-3.2.2.jar;D:\m2repository\org\apache\httpcomponents\httpcore\4.4.5\httpcore-4.4.5.jar;D:\m2repository\org\apache\httpcomponents\httpclient\4.5.2\httpclient-4.5.2.jar;D:\m2repository\commons-codec\commons-codec\1.10\commons-codec-1.10.jar;D:\m2repository\org\apache\poi\poi\3.15\poi-3.15.jar;D:\m2repository\org\apache\poi\poi-ooxml\3.15\poi-ooxml-3.15.jar;D:\m2repository\org\apache\poi\poi-ooxml-schemas\3.15\poi-ooxml-schemas-3.15.jar;D:\m2repository\org\apache\xmlbeans\xmlbeans\2.6.0\xmlbeans-2.6.0.jar;D:\m2repository\stax\stax-api\1.0.1\stax-api-1.0.1.jar;D:\m2repository\com\github\virtuald\curvesapi\1.04\curvesapi-1.04.jar;D:\m2repository\com\google\code\gson\gson\2.7\gson-2.7.jar;D:\m2repository\com\google\guava\guava\23.0\guava-23.0.jar;D:\m2repository\com\google\code\findbugs\jsr305\1.3.9\jsr305-1.3.9.jar;D:\m2repository\com\google\errorprone\error_prone_annotations\2.0.18\error_prone_annotations-2.0.18.jar;D:\m2repository\com\google\j2objc\j2objc-annotations\1.1\j2objc-annotations-1.1.jar;D:\m2repository\org\codehaus\mojo\animal-sniffer-annotations\1.14\animal-sniffer-annotations-1.14.jar;D:\m2repository\org\apache\commons\commons-lang3\3.6\commons-lang3-3.6.jar;D:\m2repository\org\apache\commons\commons-collections4\4.1\commons-collections4-4.1.jar;D:\m2repository\com\alibaba\ais\iceberg-common-support\1.2.1-SNAPSHOT\iceberg-common-support-1.2.1-20180410.091755-43.jar;D:\m2repository\com\alibaba\ais\oceankeeper-api-client\1.0.2-SNAPSHOT\oceankeeper-api-client-1.0.2-20180315.103024-13.jar;D:\m2repository\com\taobao\messenger\messenger-common\2.0.0-SNAPSHOT\messenger-common-2.0.0-20180314.095112-62.jar;D:\m2repository\com\alibaba\iwork\shared\mc.api\1.1.4\mc.api-1.1.4.jar;D:\m2repository\com\alibaba\iwork\shared\iwork-commons-model\1.0.9\iwork-commons-model-1.0.9.jar;D:\m2repository\org\thymeleaf\thymeleaf\3.0.9.RELEASE\thymeleaf-3.0.9.RELEASE.jar;D:\m2repository\ognl\ognl\3.1.12\ognl-3.1.12.jar;D:\m2repository\org\javassist\javassist\3.20.0-GA\javassist-3.20.0-GA.jar;D:\m2repository\org\attoparser\attoparser\2.0.4.RELEASE\attoparser-2.0.4.RELEASE.jar;D:\m2repository\org\unbescape\unbescape\1.1.5.RELEASE\unbescape-1.1.5.RELEASE.jar;D:\m2repository\org\slf4j\slf4j-api\1.7.22\slf4j-api-1.7.22.jar;D:\m2repository\io\dropwizard\metrics\metrics-core\3.1.2\metrics-core-3.1.2.jar;D:\gitLocal\seasnail\feature\20171019_1403053_dev_1\seasnail-api-client\target\classes;D:\m2repository\com\alibaba\ais\iceberg-common-lang\1.2.1-SNAPSHOT\iceberg-common-lang-1.2.1-20180410.091748-43.jar;D:\m2repository\org\projectlombok\lombok\1.16.12\lombok-1.16.12.jar;D:\m2repository\org\hibernate\hibernate-validator\5.2.4.Final\hibernate-validator-5.2.4.Final.jar;D:\m2repository\javax\validation\validation-api\1.1.0.Final\validation-api-1.1.0.Final.jar;D:\m2repository\org\jboss\logging\jboss-logging\3.3.0.Final\jboss-logging-3.3.0.Final.jar;D:\m2repository\com\fasterxml\classmate\1.3.3\classmate-1.3.3.jar;D:\m2repository\org\springframework\spring-test\4.3.2.RELEASE\spring-test-4.3.2.RELEASE.jar;D:\m2repository\org\springframework\spring-core\4.3.5.RELEASE\spring-core-4.3.5.RELEASE.jar;D:\m2repository\commons-logging\commons-logging\1.2\commons-logging-1.2.jar;D:\m2repository\org\springframework\boot\spring-boot-test\1.4.3.RELEASE\spring-boot-test-1.4.3.RELEASE.jar;D:\m2repository\org\springframework\boot\spring-boot\1.4.3.RELEASE\spring-boot-1.4.3.RELEASE.jar;D:\m2repository\com\taobao\pandora\pandora-boot-test\2.1.7.9\pandora-boot-test-2.1.7.9.jar;D:\m2repository\com\taobao\pandora\pandora-boot-common\2.1.7.9\pandora-boot-common-2.1.7.9.jar;D:\m2repository\com\taobao\pandora\pandora-boot-loader\2.1.7.9\pandora-boot-loader-2.1.7.9.jar;D:\m2repository\com\taobao\pandora\pandora-boot-version\2.1.7.9\pandora-boot-version-2.1.7.9.jar;D:\m2repository\com\taobao\pandora\pandora.archive\2.1.7.1\pandora.archive-2.1.7.1.jar;D:\m2repository\com\taobao\pandora\pandora-boot-autoconf\2.1.7.9\pandora-boot-autoconf-2.1.7.9.jar;D:\m2repository\junit\junit\4.12\junit-4.12.jar;D:\m2repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;D:\m2repository\org\mockito\mockito-all\1.10.19\mockito-all-1.10.19.jar;D:\m2repository\com\alibaba\schedulerx\schedulerx-client\2.1.2\schedulerx-client-2.1.2.jar;D:\m2repository\com\alibaba\schedulerx\schedulerx-api\1.0.0-SNAPSHOT\schedulerx-api-1.0.0-20180106.023644-20.jar;D:\m2repository\com\taobao\diamond\diamond-client\3.7.4\diamond-client-3.7.4.jar;D:\m2repository\com\taobao\diamond\diamond-utils\3.2.0\diamond-utils-3.2.0.jar;D:\m2repository\org\codehaus\jackson\jackson-mapper-lgpl\1.9.6\jackson-mapper-lgpl-1.9.6.jar;D:\m2repository\org\codehaus\jackson\jackson-core-lgpl\1.9.6\jackson-core-lgpl-1.9.6.jar;D:\m2repository\com\taobao\middleware\logger.api\0.2.0\logger.api-0.2.0.jar;D:\m2repository\com\taobao\eagleeye\eagleeye-core\1.4.7\eagleeye-core-1.4.7.jar;D:\m2repository\com\alibaba\fastjson\1.2.8.sec01\fastjson-1.2.8.sec01.jar;D:\m2repository\org\springframework\spring-beans\4.3.5.RELEASE\spring-beans-4.3.5.RELEASE.jar;D:\m2repository\org\springframework\spring-aop\4.3.5.RELEASE\spring-aop-4.3.5.RELEASE.jar;D:\m2repository\org\springframework\spring-context\4.3.5.RELEASE\spring-context-4.3.5.RELEASE.jar;D:\m2repository\org\springframework\spring-expression\4.3.5.RELEASE\spring-expression-4.3.5.RELEASE.jar;D:\m2repository\log4j\log4j\1.2.17\log4j-1.2.17.jar;D:\m2repository\com\taobao\common\fulllinkstresstesting\0.9.9.5\fulllinkstresstesting-0.9.9.5.jar;D:\m2repository\com\alibaba\druid\1.0.20\druid-1.0.20.jar;D:\m2repository\com\alibaba\boot\schedulerx-spring-boot-starter\1.1.0-SNAPSHOT\schedulerx-spring-boot-starter-1.1.0-20170523.121559-3.jar;D:\m2repository\org\springframework\boot\spring-boot-actuator\1.4.3.RELEASE\spring-boot-actuator-1.4.3.RELEASE.jar;D:\m2repository\org\springframework\boot\spring-boot-autoconfigure\1.4.3.RELEASE\spring-boot-autoconfigure-1.4.3.RELEASE.jar;D:\m2repository\com\fasterxml\jackson\core\jackson-databind\2.8.5\jackson-databind-2.8.5.jar;D:\m2repository\com\fasterxml\jackson\core\jackson-annotations\2.8.5\jackson-annotations-2.8.5.jar;D:\m2repository\com\fasterxml\jackson\core\jackson-core\2.8.5\jackson-core-2.8.5.jar;D:\m2repository\org\springframework\boot\spring-boot-starter-aop\1.4.3.RELEASE\spring-boot-starter-aop-1.4.3.RELEASE.jar;D:\m2repository\org\springframework\boot\spring-boot-starter\1.4.3.RELEASE\spring-boot-starter-1.4.3.RELEASE.jar;D:\m2repository\org\springframework\boot\spring-boot-starter-logging\1.4.3.RELEASE\spring-boot-starter-logging-1.4.3.RELEASE.jar;D:\m2repository\ch\qos\logback\logback-classic\1.1.8\logback-classic-1.1.8.jar;D:\m2repository\ch\qos\logback\logback-core\1.1.8\logback-core-1.1.8.jar;D:\m2repository\org\slf4j\jcl-over-slf4j\1.7.22\jcl-over-slf4j-1.7.22.jar;D:\m2repository\org\slf4j\jul-to-slf4j\1.7.22\jul-to-slf4j-1.7.22.jar;D:\m2repository\org\slf4j\log4j-over-slf4j\1.7.22\log4j-over-slf4j-1.7.22.jar;D:\m2repository\org\yaml\snakeyaml\1.17\snakeyaml-1.17.jar;D:\m2repository\org\aspectj\aspectjweaver\1.8.9\aspectjweaver-1.8.9.jar;D:\m2repository\com\aliexpress\boot\spring-boot-starter-endpoints\1.0.3\spring-boot-starter-endpoints-1.0.3.jar;D:\m2repository\org\springframework\boot\spring-boot-starter-web\1.4.3.RELEASE\spring-boot-starter-web-1.4.3.RELEASE.jar;D:\m2repository\org\springframework\boot\spring-boot-starter-tomcat\1.4.3.RELEASE\spring-boot-starter-tomcat-1.4.3.RELEASE.jar;D:\m2repository\org\apache\tomcat\embed\tomcat-embed-core\8.5.6\tomcat-embed-core-8.5.6.jar;D:\m2repository\org\apache\tomcat\embed\tomcat-embed-el\8.5.6\tomcat-embed-el-8.5.6.jar;D:\m2repository\org\apache\tomcat\embed\tomcat-embed-websocket\8.5.6\tomcat-embed-websocket-8.5.6.jar;D:\m2repository\org\springframework\spring-web\4.3.5.RELEASE\spring-web-4.3.5.RELEASE.jar;D:\m2repository\org\springframework\spring-webmvc\4.3.5.RELEASE\spring-webmvc-4.3.5.RELEASE.jar;D:\m2repository\com\alibaba\alimonitor\alimonitor-jmonitor\1.1.7\alimonitor-jmonitor-1.1.7.jar;D:\m2repository\com\aliyun\aliyun-java-sdk-core\3.0.0\aliyun-java-sdk-core-3.0.0.jar;D:\m2repository\com\aliyun\aliyun-java-sdk-dm\3.3.1\aliyun-java-sdk-dm-3.3.1.jar;D:\m2repository\com\sun\mail\javax.mail\1.5.6\javax.mail-1.5.6.jar;D:\m2repository\javax\activation\activation\1.1\activation-1.1.jar" com.alibaba.ais.seasnail.web.test.ThymeleafTest
    15:25:00.448 [main] DEBUG org.thymeleaf.TemplateEngine - [THYMELEAF] INITIALIZING TEMPLATE ENGINE
    15:25:00.913 [main] DEBUG org.thymeleaf.TemplateEngine.CONFIG - Initializing Thymeleaf Template engine configuration...
    [THYMELEAF] TEMPLATE ENGINE CONFIGURATION:
    [THYMELEAF] * Thymeleaf version: 3.0.9.RELEASE (built 2017-11-05T00:10:15+0000)
    [THYMELEAF] * Cache Manager implementation: org.thymeleaf.cache.StandardCacheManager
    [THYMELEAF] * Template resolvers:
    [THYMELEAF]     * org.thymeleaf.templateresolver.StringTemplateResolver
    [THYMELEAF] * Message resolvers:
    [THYMELEAF]     * org.thymeleaf.messageresolver.StandardMessageResolver
    [THYMELEAF] * Link builders:
    [THYMELEAF]     * org.thymeleaf.linkbuilder.StandardLinkBuilder
    [THYMELEAF] * Dialect: Standard (org.thymeleaf.standard.StandardDialect)
    [THYMELEAF]     * Prefix: "th"
    [THYMELEAF]     * Processors for Template Mode: HTML
    [THYMELEAF]         * Element Tag Processors by [matching element and attribute name] [precedence]:
    [THYMELEAF]             * [* {th:include,data-th-include}] [100]: org.thymeleaf.standard.processor.StandardIncludeTagProcessor
    [THYMELEAF]             * [* {th:insert,data-th-insert}] [100]: org.thymeleaf.standard.processor.StandardInsertTagProcessor
    [THYMELEAF]             * [* {th:replace,data-th-replace}] [100]: org.thymeleaf.standard.processor.StandardReplaceTagProcessor
    [THYMELEAF]             * [* {th:substituteby,data-th-substituteby}] [100]: org.thymeleaf.standard.processor.StandardSubstituteByTagProcessor
    [THYMELEAF]             * [* {th:each,data-th-each}] [200]: org.thymeleaf.standard.processor.StandardEachTagProcessor
    [THYMELEAF]             * [* {th:switch,data-th-switch}] [250]: org.thymeleaf.standard.processor.StandardSwitchTagProcessor
    [THYMELEAF]             * [* {th:case,data-th-case}] [275]: org.thymeleaf.standard.processor.StandardCaseTagProcessor
    [THYMELEAF]             * [* {th:if,data-th-if}] [300]: org.thymeleaf.standard.processor.StandardIfTagProcessor
    [THYMELEAF]             * [* {th:unless,data-th-unless}] [400]: org.thymeleaf.standard.processor.StandardUnlessTagProcessor
    [THYMELEAF]             * [* {th:object,data-th-object}] [500]: org.thymeleaf.standard.processor.StandardObjectTagProcessor
    [THYMELEAF]             * [* {th:with,data-th-with}] [600]: org.thymeleaf.standard.processor.StandardWithTagProcessor
    [THYMELEAF]             * [* {th:attr,data-th-attr}] [700]: org.thymeleaf.standard.processor.StandardAttrTagProcessor
    [THYMELEAF]             * [* {th:attrprepend,data-th-attrprepend}] [800]: org.thymeleaf.standard.processor.StandardAttrprependTagProcessor
    [THYMELEAF]             * [* {th:attrappend,data-th-attrappend}] [900]: org.thymeleaf.standard.processor.StandardAttrappendTagProcessor
    [THYMELEAF]             * [* {th:alt-title,data-th-alt-title}] [990]: org.thymeleaf.standard.processor.StandardAltTitleTagProcessor
    [THYMELEAF]             * [* {th:lang-xmllang,data-th-lang-xmllang}] [990]: org.thymeleaf.standard.processor.StandardLangXmlLangTagProcessor
    [THYMELEAF]             * [* {th:action,data-th-action}] [1000]: org.thymeleaf.standard.processor.StandardActionTagProcessor
    [THYMELEAF]             * [* {th:default,data-th-default}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
    [THYMELEAF]             * [* {th:hidden,data-th-hidden}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
    [THYMELEAF]             * [* {th:pubdate,data-th-pubdate}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
    [THYMELEAF]             * [* {th:nowrap,data-th-nowrap}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
    [THYMELEAF]             * [* {th:ismap,data-th-ismap}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
    [THYMELEAF]             * [* {th:async,data-th-async}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
    [THYMELEAF]             * [* {th:multiple,data-th-multiple}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
    [THYMELEAF]             * [* {th:checked,data-th-checked}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
    [THYMELEAF]             * [* {th:required,data-th-required}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
    [THYMELEAF]             * [* {th:seamless,data-th-seamless}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
    [THYMELEAF]             * [* {th:declare,data-th-declare}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
    [THYMELEAF]             * [* {th:selected,data-th-selected}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
    [THYMELEAF]             * [* {th:readonly,data-th-readonly}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
    [THYMELEAF]             * [* {th:reversed,data-th-reversed}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
    [THYMELEAF]             * [* {th:loop,data-th-loop}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
    [THYMELEAF]             * [* {th:scoped,data-th-scoped}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
    [THYMELEAF]             * [* {th:disabled,data-th-disabled}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
    [THYMELEAF]             * [* {th:defer,data-th-defer}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
    [THYMELEAF]             * [* {th:autoplay,data-th-autoplay}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
    [THYMELEAF]             * [* {th:novalidate,data-th-novalidate}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
    [THYMELEAF]             * [* {th:formnovalidate,data-th-formnovalidate}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
    [THYMELEAF]             * [* {th:autofocus,data-th-autofocus}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
    [THYMELEAF]             * [* {th:controls,data-th-controls}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
    [THYMELEAF]             * [* {th:open,data-th-open}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
    [THYMELEAF]             * [* {th:onresize,data-th-onresize}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:ondragend,data-th-ondragend}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onoffline,data-th-onoffline}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onkeydown,data-th-onkeydown}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onkeypress,data-th-onkeypress}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onended,data-th-onended}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onchange,data-th-onchange}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onmouseover,data-th-onmouseover}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onblur,data-th-onblur}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onkeyup,data-th-onkeyup}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onratechange,data-th-onratechange}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onmessage,data-th-onmessage}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onabort,data-th-onabort}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:ondragstart,data-th-ondragstart}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:ondrag,data-th-ondrag}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onsuspend,data-th-onsuspend}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onclick,data-th-onclick}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:ontimeupdate,data-th-ontimeupdate}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:ondragleave,data-th-ondragleave}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:oncontextmenu,data-th-oncontextmenu}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onloadstart,data-th-onloadstart}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onscroll,data-th-onscroll}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onplay,data-th-onplay}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:ondragover,data-th-ondragover}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onreset,data-th-onreset}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onbeforeprint,data-th-onbeforeprint}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onforminput,data-th-onforminput}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onprogress,data-th-onprogress}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onredo,data-th-onredo}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onmousemove,data-th-onmousemove}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onshow,data-th-onshow}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:ondblclick,data-th-ondblclick}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onemptied,data-th-onemptied}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onload,data-th-onload}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onpause,data-th-onpause}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:oninvalid,data-th-oninvalid}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:oncanplaythrough,data-th-oncanplaythrough}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onhashchange,data-th-onhashchange}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onformchange,data-th-onformchange}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onvolumechange,data-th-onvolumechange}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onseeked,data-th-onseeked}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onloadeddata,data-th-onloadeddata}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onloadedmetadata,data-th-onloadedmetadata}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onafterprint,data-th-onafterprint}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onmousedown,data-th-onmousedown}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onplaying,data-th-onplaying}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:ondrop,data-th-ondrop}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onundo,data-th-onundo}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onselect,data-th-onselect}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onsubmit,data-th-onsubmit}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:ondragenter,data-th-ondragenter}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onseeking,data-th-onseeking}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onpopstate,data-th-onpopstate}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onunload,data-th-onunload}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onbeforeunload,data-th-onbeforeunload}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:oninput,data-th-oninput}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onwaiting,data-th-onwaiting}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:ondurationchange,data-th-ondurationchange}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onmousewheel,data-th-onmousewheel}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onstorage,data-th-onstorage}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onmouseout,data-th-onmouseout}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onstalled,data-th-onstalled}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onmouseup,data-th-onmouseup}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onreadystatechange,data-th-onreadystatechange}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:oncanplay,data-th-oncanplay}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:ononline,data-th-ononline}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onfocus,data-th-onfocus}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:onerror,data-th-onerror}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
    [THYMELEAF]             * [* {th:href,data-th-href}] [1000]: org.thymeleaf.standard.processor.StandardHrefTagProcessor
    [THYMELEAF]             * [* {th:inline,data-th-inline}] [1000]: org.thymeleaf.standard.processor.StandardInlineHTMLTagProcessor
    [THYMELEAF]             * [* {th:method,data-th-method}] [1000]: org.thymeleaf.standard.processor.StandardMethodTagProcessor
    [THYMELEAF]             * [* {th:name,data-th-name}] [1000]: org.thymeleaf.standard.processor.StandardNonRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:type,data-th-type}] [1000]: org.thymeleaf.standard.processor.StandardNonRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:contextmenu,data-th-contextmenu}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:media,data-th-media}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:abbr,data-th-abbr}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:content,data-th-content}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:http-equiv,data-th-http-equiv}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:min,data-th-min}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:formaction,data-th-formaction}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:draggable,data-th-draggable}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:optimum,data-th-optimum}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:vspace,data-th-vspace}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:start,data-th-start}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:audio,data-th-audio}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:formenctype,data-th-formenctype}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:manifest,data-th-manifest}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:frameborder,data-th-frameborder}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:hspace,data-th-hspace}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:enctype,data-th-enctype}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:sandbox,data-th-sandbox}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:pattern,data-th-pattern}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:scrolling,data-th-scrolling}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:rules,data-th-rules}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:width,data-th-width}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:maxlength,data-th-maxlength}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:frame,data-th-frame}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:preload,data-th-preload}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:autocomplete,data-th-autocomplete}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:icon,data-th-icon}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:background,data-th-background}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:keytype,data-th-keytype}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:cols,data-th-cols}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:marginheight,data-th-marginheight}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:step,data-th-step}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:axis,data-th-axis}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:title,data-th-title}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:colspan,data-th-colspan}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:formtarget,data-th-formtarget}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:summary,data-th-summary}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:kind,data-th-kind}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:cellpadding,data-th-cellpadding}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:usemap,data-th-usemap}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:bgcolor,data-th-bgcolor}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:charset,data-th-charset}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:scope,data-th-scope}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:hreflang,data-th-hreflang}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:placeholder,data-th-placeholder}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:dir,data-th-dir}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:span,data-th-span}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:cellspacing,data-th-cellspacing}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:archive,data-th-archive}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:sizes,data-th-sizes}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:poster,data-th-poster}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:tabindex,data-th-tabindex}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:list,data-th-list}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:marginwidth,data-th-marginwidth}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:headers,data-th-headers}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:target,data-th-target}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:align,data-th-align}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:codebase,data-th-codebase}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:rel,data-th-rel}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:cite,data-th-cite}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:form,data-th-form}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:border,data-th-border}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:longdesc,data-th-longdesc}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:scheme,data-th-scheme}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:valuetype,data-th-valuetype}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:style,data-th-style}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:data,data-th-data}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:compact,data-th-compact}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:standby,data-th-standby}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:srclang,data-th-srclang}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:challenge,data-th-challenge}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:dropzone,data-th-dropzone}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:accesskey,data-th-accesskey}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:wrap,data-th-wrap}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:height,data-th-height}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:contenteditable,data-th-contenteditable}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:max,data-th-max}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:codetype,data-th-codetype}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:for,data-th-for}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:rev,data-th-rev}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:label,data-th-label}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:lang,data-th-lang}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:high,data-th-high}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:classid,data-th-classid}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:formmethod,data-th-formmethod}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:alt,data-th-alt}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:rowspan,data-th-rowspan}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:class,data-th-class}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:rows,data-th-rows}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:datetime,data-th-datetime}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:accept-charset,data-th-accept-charset}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:low,data-th-low}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:spellcheck,data-th-spellcheck}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:size,data-th-size}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:accept,data-th-accept}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:id,data-th-id}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:radiogroup,data-th-radiogroup}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
    [THYMELEAF]             * [* {th:src,data-th-src}] [1000]: org.thymeleaf.standard.processor.StandardSrcTagProcessor
    [THYMELEAF]             * [* {th:value,data-th-value}] [1000]: org.thymeleaf.standard.processor.StandardValueTagProcessor
    [THYMELEAF]             * [* {th:xmlbase,data-th-xmlbase}] [1000]: org.thymeleaf.standard.processor.StandardXmlBaseTagProcessor
    [THYMELEAF]             * [* {th:xmllang,data-th-xmllang}] [1000]: org.thymeleaf.standard.processor.StandardXmlLangTagProcessor
    [THYMELEAF]             * [* {xmlns:th}] [1000]: org.thymeleaf.standard.processor.StandardXmlNsTagProcessor
    [THYMELEAF]             * [* {th:xmlspace,data-th-xmlspace}] [1000]: org.thymeleaf.standard.processor.StandardXmlSpaceTagProcessor
    [THYMELEAF]             * [* {th:classappend,data-th-classappend}] [1100]: org.thymeleaf.standard.processor.StandardClassappendTagProcessor
    [THYMELEAF]             * [* {th:styleappend,data-th-styleappend}] [1100]: org.thymeleaf.standard.processor.StandardStyleappendTagProcessor
    [THYMELEAF]             * [* {th:text,data-th-text}] [1300]: org.thymeleaf.standard.processor.StandardTextTagProcessor
    [THYMELEAF]             * [* {th:utext,data-th-utext}] [1400]: org.thymeleaf.standard.processor.StandardUtextTagProcessor
    [THYMELEAF]             * [* {th:fragment,data-th-fragment}] [1500]: org.thymeleaf.standard.processor.StandardFragmentTagProcessor
    [THYMELEAF]             * [* {th:assert,data-th-assert}] [1550]: org.thymeleaf.standard.processor.StandardAssertTagProcessor
    [THYMELEAF]             * [* {th:remove,data-th-remove}] [1600]: org.thymeleaf.standard.processor.StandardRemoveTagProcessor
    [THYMELEAF]             * [* {th:ref,data-th-ref}] [10000]: org.thymeleaf.standard.processor.StandardRefAttributeTagProcessor
    [THYMELEAF]             * [{th:block,th-block} *] [100000]: org.thymeleaf.standard.processor.StandardBlockTagProcessor
    [THYMELEAF]             * [* th:*] [2147483647]: org.thymeleaf.standard.processor.StandardDefaultAttributesTagProcessor
    [THYMELEAF]         * Text Processors by [precedence]:
    [THYMELEAF]             * [1000]: org.thymeleaf.standard.processor.StandardInliningTextProcessor
    [THYMELEAF]         * DOCTYPE Processors by [precedence]:
    [THYMELEAF]             * [1000]: org.thymeleaf.standard.processor.StandardTranslationDocTypeProcessor
    [THYMELEAF]         * CDATA Section Processors by [precedence]:
    [THYMELEAF]             * [1000]: org.thymeleaf.standard.processor.StandardInliningCDATASectionProcessor
    [THYMELEAF]         * Comment Processors by [precedence]:
    [THYMELEAF]             * [1000]: org.thymeleaf.standard.processor.StandardInliningCommentProcessor
    [THYMELEAF]             * [1100]: org.thymeleaf.standard.processor.StandardConditionalCommentProcessor
    [THYMELEAF]     * Processors for Template Mode: XML
    [THYMELEAF]         * Element Tag Processors by [matching element and attribute name] [precedence]:
    [THYMELEAF]             * [* {th:include}] [100]: org.thymeleaf.standard.processor.StandardIncludeTagProcessor
    [THYMELEAF]             * [* {th:insert}] [100]: org.thymeleaf.standard.processor.StandardInsertTagProcessor
    [THYMELEAF]             * [* {th:replace}] [100]: org.thymeleaf.standard.processor.StandardReplaceTagProcessor
    [THYMELEAF]             * [* {th:substituteby}] [100]: org.thymeleaf.standard.processor.StandardSubstituteByTagProcessor
    [THYMELEAF]             * [* {th:each}] [200]: org.thymeleaf.standard.processor.StandardEachTagProcessor
    [THYMELEAF]             * [* {th:switch}] [250]: org.thymeleaf.standard.processor.StandardSwitchTagProcessor
    [THYMELEAF]             * [* {th:case}] [275]: org.thymeleaf.standard.processor.StandardCaseTagProcessor
    [THYMELEAF]             * [* {th:if}] [300]: org.thymeleaf.standard.processor.StandardIfTagProcessor
    [THYMELEAF]             * [* {th:unless}] [400]: org.thymeleaf.standard.processor.StandardUnlessTagProcessor
    [THYMELEAF]             * [* {th:object}] [500]: org.thymeleaf.standard.processor.StandardObjectTagProcessor
    [THYMELEAF]             * [* {th:with}] [600]: org.thymeleaf.standard.processor.StandardWithTagProcessor
    [THYMELEAF]             * [* {th:attr}] [700]: org.thymeleaf.standard.processor.StandardAttrTagProcessor
    [THYMELEAF]             * [* {th:attrprepend}] [800]: org.thymeleaf.standard.processor.StandardAttrprependTagProcessor
    [THYMELEAF]             * [* {th:attrappend}] [900]: org.thymeleaf.standard.processor.StandardAttrappendTagProcessor
    [THYMELEAF]             * [* {th:inline}] [1000]: org.thymeleaf.standard.processor.StandardInlineXMLTagProcessor
    [THYMELEAF]             * [* {xmlns:th}] [1000]: org.thymeleaf.standard.processor.StandardXmlNsTagProcessor
    [THYMELEAF]             * [* {th:text}] [1300]: org.thymeleaf.standard.processor.StandardTextTagProcessor
    [THYMELEAF]             * [* {th:utext}] [1400]: org.thymeleaf.standard.processor.StandardUtextTagProcessor
    [THYMELEAF]             * [* {th:fragment}] [1500]: org.thymeleaf.standard.processor.StandardFragmentTagProcessor
    [THYMELEAF]             * [* {th:assert}] [1550]: org.thymeleaf.standard.processor.StandardAssertTagProcessor
    [THYMELEAF]             * [* {th:remove}] [1600]: org.thymeleaf.standard.processor.StandardRemoveTagProcessor
    [THYMELEAF]             * [* {th:ref}] [10000]: org.thymeleaf.standard.processor.StandardRefAttributeTagProcessor
    [THYMELEAF]             * [{th:block} *] [100000]: org.thymeleaf.standard.processor.StandardBlockTagProcessor
    [THYMELEAF]             * [* th:*] [2147483647]: org.thymeleaf.standard.processor.StandardDefaultAttributesTagProcessor
    [THYMELEAF]         * Text Processors by [precedence]:
    [THYMELEAF]             * [1000]: org.thymeleaf.standard.processor.StandardInliningTextProcessor
    [THYMELEAF]         * CDATA Section Processors by [precedence]:
    [THYMELEAF]             * [1000]: org.thymeleaf.standard.processor.StandardInliningCDATASectionProcessor
    [THYMELEAF]         * Comment Processors by [precedence]:
    [THYMELEAF]             * [1000]: org.thymeleaf.standard.processor.StandardInliningCommentProcessor
    [THYMELEAF]     * Processors for Template Mode: TEXT
    [THYMELEAF]         * Element Tag Processors by [matching element and attribute name] [precedence]:
    [THYMELEAF]             * [* {th:insert}] [100]: org.thymeleaf.standard.processor.StandardInsertTagProcessor
    [THYMELEAF]             * [* {th:replace}] [100]: org.thymeleaf.standard.processor.StandardReplaceTagProcessor
    [THYMELEAF]             * [* {th:each}] [200]: org.thymeleaf.standard.processor.StandardEachTagProcessor
    [THYMELEAF]             * [* {th:switch}] [250]: org.thymeleaf.standard.processor.StandardSwitchTagProcessor
    [THYMELEAF]             * [* {th:case}] [275]: org.thymeleaf.standard.processor.StandardCaseTagProcessor
    [THYMELEAF]             * [* {th:if}] [300]: org.thymeleaf.standard.processor.StandardIfTagProcessor
    [THYMELEAF]             * [* {th:unless}] [400]: org.thymeleaf.standard.processor.StandardUnlessTagProcessor
    [THYMELEAF]             * [* {th:object}] [500]: org.thymeleaf.standard.processor.StandardObjectTagProcessor
    [THYMELEAF]             * [* {th:with}] [600]: org.thymeleaf.standard.processor.StandardWithTagProcessor
    [THYMELEAF]             * [* {th:inline}] [1000]: org.thymeleaf.standard.processor.StandardInlineTextualTagProcessor
    [THYMELEAF]             * [* {th:text}] [1300]: org.thymeleaf.standard.processor.StandardTextTagProcessor
    [THYMELEAF]             * [* {th:utext}] [1400]: org.thymeleaf.standard.processor.StandardUtextTagProcessor
    [THYMELEAF]             * [* {th:assert}] [1550]: org.thymeleaf.standard.processor.StandardAssertTagProcessor
    [THYMELEAF]             * [* {th:remove}] [1600]: org.thymeleaf.standard.processor.StandardRemoveTagProcessor
    [THYMELEAF]             * [* 100000] [org.thymeleaf.standard.processor.StandardBlockTagProcessor]: {}
    [THYMELEAF]             * [{th:block} *] [100000]: org.thymeleaf.standard.processor.StandardBlockTagProcessor
    [THYMELEAF]         * Text Processors by [precedence]:
    [THYMELEAF]             * [1000]: org.thymeleaf.standard.processor.StandardInliningTextProcessor
    [THYMELEAF]     * Processors for Template Mode: JAVASCRIPT
    [THYMELEAF]         * Element Tag Processors by [matching element and attribute name] [precedence]:
    [THYMELEAF]             * [* {th:insert}] [100]: org.thymeleaf.standard.processor.StandardInsertTagProcessor
    [THYMELEAF]             * [* {th:replace}] [100]: org.thymeleaf.standard.processor.StandardReplaceTagProcessor
    [THYMELEAF]             * [* {th:each}] [200]: org.thymeleaf.standard.processor.StandardEachTagProcessor
    [THYMELEAF]             * [* {th:switch}] [250]: org.thymeleaf.standard.processor.StandardSwitchTagProcessor
    [THYMELEAF]             * [* {th:case}] [275]: org.thymeleaf.standard.processor.StandardCaseTagProcessor
    [THYMELEAF]             * [* {th:if}] [300]: org.thymeleaf.standard.processor.StandardIfTagProcessor
    [THYMELEAF]             * [* {th:unless}] [400]: org.thymeleaf.standard.processor.StandardUnlessTagProcessor
    [THYMELEAF]             * [* {th:object}] [500]: org.thymeleaf.standard.processor.StandardObjectTagProcessor
    [THYMELEAF]             * [* {th:with}] [600]: org.thymeleaf.standard.processor.StandardWithTagProcessor
    [THYMELEAF]             * [* {th:inline}] [1000]: org.thymeleaf.standard.processor.StandardInlineTextualTagProcessor
    [THYMELEAF]             * [* {th:text}] [1300]: org.thymeleaf.standard.processor.StandardTextTagProcessor
    [THYMELEAF]             * [* {th:utext}] [1400]: org.thymeleaf.standard.processor.StandardUtextTagProcessor
    [THYMELEAF]             * [* {th:assert}] [1550]: org.thymeleaf.standard.processor.StandardAssertTagProcessor
    [THYMELEAF]             * [* {th:remove}] [1600]: org.thymeleaf.standard.processor.StandardRemoveTagProcessor
    [THYMELEAF]             * [* 100000] [org.thymeleaf.standard.processor.StandardBlockTagProcessor]: {}
    [THYMELEAF]             * [{th:block} *] [100000]: org.thymeleaf.standard.processor.StandardBlockTagProcessor
    [THYMELEAF]         * Text Processors by [precedence]:
    [THYMELEAF]             * [1000]: org.thymeleaf.standard.processor.StandardInliningTextProcessor
    [THYMELEAF]     * Processors for Template Mode: CSS
    [THYMELEAF]         * Element Tag Processors by [matching element and attribute name] [precedence]:
    [THYMELEAF]             * [* {th:insert}] [100]: org.thymeleaf.standard.processor.StandardInsertTagProcessor
    [THYMELEAF]             * [* {th:replace}] [100]: org.thymeleaf.standard.processor.StandardReplaceTagProcessor
    [THYMELEAF]             * [* {th:each}] [200]: org.thymeleaf.standard.processor.StandardEachTagProcessor
    [THYMELEAF]             * [* {th:switch}] [250]: org.thymeleaf.standard.processor.StandardSwitchTagProcessor
    [THYMELEAF]             * [* {th:case}] [275]: org.thymeleaf.standard.processor.StandardCaseTagProcessor
    [THYMELEAF]             * [* {th:if}] [300]: org.thymeleaf.standard.processor.StandardIfTagProcessor
    [THYMELEAF]             * [* {th:unless}] [400]: org.thymeleaf.standard.processor.StandardUnlessTagProcessor
    [THYMELEAF]             * [* {th:object}] [500]: org.thymeleaf.standard.processor.StandardObjectTagProcessor
    [THYMELEAF]             * [* {th:with}] [600]: org.thymeleaf.standard.processor.StandardWithTagProcessor
    [THYMELEAF]             * [* {th:inline}] [1000]: org.thymeleaf.standard.processor.StandardInlineTextualTagProcessor
    [THYMELEAF]             * [* {th:text}] [1300]: org.thymeleaf.standard.processor.StandardTextTagProcessor
    [THYMELEAF]             * [* {th:utext}] [1400]: org.thymeleaf.standard.processor.StandardUtextTagProcessor
    [THYMELEAF]             * [* {th:assert}] [1550]: org.thymeleaf.standard.processor.StandardAssertTagProcessor
    [THYMELEAF]             * [* {th:remove}] [1600]: org.thymeleaf.standard.processor.StandardRemoveTagProcessor
    [THYMELEAF]             * [* 100000] [org.thymeleaf.standard.processor.StandardBlockTagProcessor]: {}
    [THYMELEAF]             * [{th:block} *] [100000]: org.thymeleaf.standard.processor.StandardBlockTagProcessor
    [THYMELEAF]         * Text Processors by [precedence]:
    [THYMELEAF]             * [1000]: org.thymeleaf.standard.processor.StandardInliningTextProcessor
    [THYMELEAF]     * Expression Objects:
    [THYMELEAF]         * #ctx
    [THYMELEAF]         * #root
    [THYMELEAF]         * #vars
    [THYMELEAF]         * #object
    [THYMELEAF]         * #locale
    [THYMELEAF]         * #request
    [THYMELEAF]         * #response
    [THYMELEAF]         * #session
    [THYMELEAF]         * #servletContext
    [THYMELEAF]         * #conversions
    [THYMELEAF]         * #uris
    [THYMELEAF]         * #calendars
    [THYMELEAF]         * #dates
    [THYMELEAF]         * #bools
    [THYMELEAF]         * #numbers
    [THYMELEAF]         * #objects
    [THYMELEAF]         * #strings
    [THYMELEAF]         * #arrays
    [THYMELEAF]         * #lists
    [THYMELEAF]         * #sets
    [THYMELEAF]         * #maps
    [THYMELEAF]         * #aggregates
    [THYMELEAF]         * #messages
    [THYMELEAF]         * #ids
    [THYMELEAF]         * #execInfo
    [THYMELEAF]         * #httpServletRequest
    [THYMELEAF]         * #httpSession
    [THYMELEAF]     * Execution Attributes:
    [THYMELEAF]         * "StandardExpressionParser": Standard Expression Parser
    [THYMELEAF]         * "StandardJavaScriptSerializer": org.thymeleaf.standard.serializer.StandardJavaScriptSerializer@757277dc
    [THYMELEAF]         * "StandardCSSSerializer": org.thymeleaf.standard.serializer.StandardCSSSerializer@687e99d8
    [THYMELEAF]         * "StandardVariableExpressionEvaluator": OGNL
    [THYMELEAF]         * "StandardConversionService": org.thymeleaf.standard.expression.StandardConversionService@e4487af
    [THYMELEAF] TEMPLATE ENGINE CONFIGURED OK
    15:25:00.922 [main] DEBUG org.thymeleaf.TemplateEngine - [THYMELEAF] TEMPLATE ENGINE INITIALIZED
    value + 哈哈
    
    Process finished with exit code 0
    



    展开全文
  • Thymeleaf 模板引擎简介 与 Spring Boot 整合入门

    万次阅读 多人点赞 2018-07-15 16:48:13
    Thymeleaf 模板引擎 官方文档下载 Hello World 新建应用 后台控制器 前端页面 浏览器访问测试 Thymeleaf 模板引擎 1、Thymeleaf 是 Web 和独立环境的现代服务器端 Java 模板引擎,能够处理HTML,XML,...

    目录

    Thymeleaf 模板引擎

    官方文档下载

    Hello World 快速启动


    Thymeleaf 模板引擎

    1、Thymeleaf 是 Web 和独立环境的现代服务器端 Java 模板引擎,能够处理HTML,XML,JavaScript,CSS 甚至纯文本。

    2、Thymeleaf 的主要目标是提供一种优雅和高度可维护的创建模板的方式。为了实现这一点,它建立在自然模板的概念上,将其逻辑注入到模板文件中,不会影响模板被用作设计原型。这改善了设计的沟通,弥补了设计和开发团队之间的差距。

    3、Thymeleaf 也从一开始就设计了Web标准 - 特别是 HTML5 - 允许您创建完全验证的模板,Spring Boot 官方推荐使用  thymeleaf 而不是 JSP。

    4、Thymeleaf 官网:https://www.thymeleaf.org/

    5、Thymeleaf 在 Github 的主页:https://github.com/thymeleaf/thymeleaf

    6、Spring Boot 中使用 Thymeleaf  模板引擎时非常简单,因为 Spring Boot 已经提供了默认的配置,比如解析的文件前缀,文件后缀,文件编码,缓存等等,程序员需要的只是写 html 中的内容即可,可以参考《Spring Boot 引入 Thymeleaf 及入门》

    模板引擎

    1)市面上主流的 Java 模板引擎有:JSP、Velocity、Freemarker、Thymeleaf

    2)JSP本质也是模板引擎,Spring Boot 官方支持:Thymeleaf Templates、FreeMarker Templates、Groovy Templates 等模板引擎。

    3)模板引擎原理图如下,模板引擎的作用都是将模板(页面)和数据进行整合然后输出显示,区别在于不同的模板使用不同的语法,如 JSP 的 JSTL 表达式,以及 JSP 自己的表达式和语法,同理 Thymeleaf 也有自己的语法

    官方文档下载

    https://www.thymeleaf.org/documentation.html

    Hello World 快速启动

    1、新建 Spring Boot 项目,导入 thymeleaf 依赖:

    <!-- 导入Spring Boot的thymeleaf依赖-->
    <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-thymeleaf -->
    <!-- <version>2.2.7.RELEASE</version> -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    

    2、提供一个后台控制器如下,用于向前台传递参数(注:后台往前台传参和平时一样即可,Thymeleaf 没有严格要求):

    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import java.util.Map;
    /**
     * Created by Administrator on 2018/7/17 0017.
     * 用户控制器
     */
    @Controller
    public class UserController {
        /**
         * 全部基于 Spring Boot给 Thymeleaf的默认配置
         * 所以下面会跳转到 classpath:/templates/home.html 页面
         *
         * @param paramMap
         * @return
         */
        @RequestMapping("home")
        public String goHome(Map<String, Object> paramMap) {
            /** 默认Map的内容会放大请求域中,页面可以直接使用Thymeleaf取值*/
            paramMap.put("name", "张三");
            paramMap.put("age", 35);
            return "home";
        }
    
    }
    

    3、前端页面使用 Thymeleaf 处理参数:

    前端 .html 页面中的 <html> 标签可以加上 xmlns:th="http://www.thymeleaf.org" 属性,IDEA 编辑器就会有 Thymeleaf 语法提示,不写也不影响运行。

    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org">
    <head lang="en">
        <meta charset="UTF-8">
        <title>主页</title>
    </head>
    <body>
    <h3>欢迎来到主页</h3>
        <!--Thymeleaf 语法取值-->
        姓名:<span th:text="${name}">未知</span>
        年龄:<span th:text="${age}">未知</span>
    </body>
    </html>

    4、浏览器访问测试

    1、对于Spring Boot关于 Thymeleaf 的渲染规则不清楚的,可以参考《Spring Boot 引入 Thymeleaf 及入门》

    2、关于 Thmeleaf 的更多使用语法,以及深入内容可以参考《Thymeleaf》

     

    展开全文
  • Thymeleaf常见用法,Thymeleaf使用手册,基于官方手册翻译
  • Thymeleaf资料

    2019-03-21 22:19:02
    介绍Thymeleaf的PPT,思维导图,还有一个整合了Thymeleaf的springBoot的简单示例。
  • 【SpringBoot】三、SpringBoot中整合Thymeleaf模板引擎

    万次阅读 多人点赞 2020-04-16 21:41:09
    SpringBoot 为我们提供了 Thymeleaf 自动化配置解决方案,所以我们在 SpringBoot 中使用 Thymeleaf 非常方便 一、简介 Thymeleaf是一个流行的模板引擎,该模板引擎采用Java语言开发,模板引擎是一个技术名词,是跨...

    SpringBoot 为我们提供了 Thymeleaf 自动化配置解决方案,所以我们在 SpringBoot 中使用 Thymeleaf 非常方便

    一、简介

    Thymeleaf是一个流行的模板引擎,该模板引擎采用Java语言开发,模板引擎是一个技术名词,是跨领域跨平台的概念,在Java语言体系下有模板引擎,在C#、PHP语言体系下也有模板引擎。除了thymeleaf之外还有Velocity、FreeMarker等模板引擎,功能类似。
    Thymeleaf的主要目标在于提供一种可被浏览器正确显示的、格式良好的模板创建方式,因此也可以用作静态建模。你可以使用它创建经过验证的XML与HTML模板。使用thymeleaf创建的html模板可以在浏览器里面直接打开(展示静态数据),这有利于前后端分离。需要注意的是thymeleaf不是spring旗下的。

    二、整合

    • 1、引入 thymeleaf,在 pom.xml 文件中加入:
    <!-- thymeleaf 模板引擎 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <!-- web 开发 -->
    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    

    由于 SpringBoot 为 thymeleaf 提供了一整套的自动化配置方案,使得我们几乎不需要做任何更改就可以直接使用了

    • 2、SpringBoot 中 thymeleaf 默认配置
    @ConfigurationProperties(prefix = "spring.thymeleaf")
    public class ThymeleafProperties {
    	private static final Charset DEFAULT_ENCODING = StandardCharsets.UTF_8;
    	public static final String DEFAULT_PREFIX = "classpath:/templates/";
    	public static final String DEFAULT_SUFFIX = ".html";
    	/**
    	 * Whether to check that the template exists before rendering it.
    	 */
    	private boolean checkTemplate = true;
    	/**
    	 * Whether to check that the templates location exists.
    	 */
    	private boolean checkTemplateLocation = true;
    	/**
    	 * Prefix that gets prepended to view names when building a URL.
    	 */
    	private String prefix = DEFAULT_PREFIX;
    	/**
    	 * Suffix that gets appended to view names when building a URL.
    	 */
    	private String suffix = DEFAULT_SUFFIX;
    	/**
    	 * Template mode to be applied to templates. See also Thymeleaf's TemplateMode enum.
    	 */
    	private String mode = "HTML";
    	...
    }
    

    通过 org.springframework.boot.autoconfigure.thymeleaf.ThymeleafProperties 找到 SpringBoot 中 thymeleaf 的默认配置,我们不难看出

    默认编码格式:UTF-8
    默认路径:classpath:/templates/,都放在根目录下的 templates 目录下
    默认后缀:.html,thymeleaf 都是 html 文件
    检查模板:默认开启
    检查模板位置:默认开启

    从上述源码可以看出,我们的 thymeleaf 模板文件默认放在 resources/templates 目录下,默认的后缀是 .html
    当然,我们不想使用默认配置,我们也可以在 application.tml 文件中以 spring.thymeleaf 开始个性配置

    例如:

    spring:
    	# thymeleaf模板引擎配置
      	thymeleaf:
    	    # 缓存
    	    cache: false
    	    # 编码格式
    	    encoding: UTF-8
    

    我们在开发中,可能被缓存坑过很多次,我们可以将 thymeleaf 中的缓存给关闭,保持实时更新

    三、开发

    • 1、创建控制层 IndexController.java
    @Controller
    public class IndexController {
    
        /**
         * 请求 index 页面
         * @return
         */
         @GetMapping("index")
        public ModelAndView index() {
            ModelAndView mav = new ModelAndView("index");
            mav.addObject("title", "首页");
            List<UserInfo> list = new ArrayList<>();
            UserInfo user = null;
            for (int i = 0; i < 10; i++) {
                user = new UserInfo();
                user.setId(i + 1);
                user.setNickName("user" + i);
                user.setSignature("SpringBoot真香,+" + (i + 1));
                list.add(user);
            }
            mav.addObject("users", list);
            return mav;
        }
    }
    

    我们创建了 IndexController,请求 index 返回 index.html 页面,

    • 2、创建 thymeleaf 模板 index.html

    下面我们在 resources/templates 目录下创建 index.html

    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title th:text="${title}"></title>
    </head>
    <body>
    <table border="1">
        <tr>
            <td>用户编号</td>
            <td>用户昵称</td>
            <td>个性签名</td>
        </tr>
        <tr th:each="item : ${list}">
            <td th:text="${item.id}"></td>
            <td th:text="${item.nickName}"></td>
            <td th:text="${item.signature}"></td>
        </tr>
    </table>
    </body>
    </html>
    

    注意:

    xmlns=“http://www.w3.org/1999/xhtml” xmlns:th=“http://www.thymeleaf.org”,是必须要在 html 标签中写入的
    xmlns 是xml namespace的缩写,也就是 XML 命名空间
    xmlns 属性可以在文档中定义一个或多个可供选择的命名空间
    该属性可以放置在文档内任何元素的开始标签中
    该属性的值类似于URL,它定义了一个命名空间,浏览器会将此命名空间用于该属性所在元素内的所有内容

    我们在 ModelAndView 中传入了 title 参数,使用 th:text="${title}" 给 title 标签赋值,与 JSTL 使用方式类似,效果如图:
    title效果展示
    我们还通过 th:each=“item : ${list}” 渲染了一个用户表格,如图:
    用户表格

    • 3、拼接 URL
    <a th:href="@{/user/info(id=${user.id})}">参数拼接</a>
    <a th:href="@{/user/info(id=${user.id},phone=${user.phone})}">多参数拼接</a>
    <a th:href="@{/user/info/{uid}(uid=${user.id})}">RESTful风格</a>
    <a th:href="@{/user/info/{uid}/abc(uid=${user.id})}">RESTful风格</a>
    

    四、使用技巧

    thymeleaf 在 JavaScript 中的使用技巧

    • 1、开发前戏
    <script type="text/javascript" th:inline="javascript">
    ...
    </script>
    

    我们需要在 script 标签中写入 th:inline=“javascript”,注明使用 thymeleaf 的内联方法

    • 2、Ajax 路径问题
    url: /*[[@{/user/saveUser}]]*/,
    data: {
    	'user': user
    }
    type: 'post',
    dataType: 'json',
    

    我们使用 /[[@{/**}]]/ 来获取项目的上下文路径,访问项目

    • 3、获取 model 中的数据
    <script type="text/javascript" th:inline="javascript">
    	var userName = [[${user.name}]];
    </script>
    
    • 4、使用前端框架的 iframe 弹窗,例如 layui
    function showUserInfo() {
        layer.open({
            type: 2,
            title: '用户信息',
            shade: 0.2,
            area: ['600px', '450px'],
            offset: '100px',
            shadeClose: false,
            content: /*[[@{/user/getUserInfo}]]*/
        });
    }
    

    需要传参:

    layer.open({
        type: 2,
        title: '用户信息',
        shade: 0.2,
        area: ['600px', '450px'],
        offset: '100px',
        shadeClose: false,
        content: [[@{/user/getUserInfo}]]+'?id='+id
    });
    

    我们在路径中传入了用户的 id

    • 5、时间格式化
    <span th:text="${#dates.format(data.createTime, 'yyyy年MM月dd日')}"></span>
    
    <span th:text="${#dates.format(data.createTime, 'yyyy-MM-dd HH:mm:ss')}"></span>
    
    • 6、解析 HTML 内容
    <div th:utext="${data.content}"></div>
    
    • 7、动态设置背景图片
    <body th:style="'background: url('+@{/pages/login/backgroud.jpg}+') no-repeat center'"></body>
    

    五、手动渲染

    我们在发送邮件的时候,会需要使用到邮件模板,我们选择手动渲染即可

    • 1、新建一个邮件模板 email.html
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>欢迎加入我们</title>
    </head>
    <body>
    <h1 style="text-align: center">入职欢迎</h1>
    <p><span th:text="${user.name}"></span>:你好!!!欢迎加我们XXX公司,你的入职信息如下:</p>
    <p>岗位:<span th:text="${user.job}"></span></p>
    <p>月薪:<span th:text="${user.wages}"></span></p>
    </body>
    </html>
    
    • 2、发送邮件测试
    @Autowired
    TemplateEngine templateEngine;
    
    @Test
    public void test1() throws MessagingException {
        Context context = new Context();
        context.setVariable("name", "张三");
        context.setVariable("job", "Java开发工程师");
        context.setVariable("wages", 7800);
        String mail = templateEngine.process("email", context);
        emailUtils.sendHtmlMail("xxxxxxxxx@qq.com", "入职通知", mail);
    }
    

    SpringBoot 中发送邮件的教程请看:SpringBoot中发送邮件

    • 3、效果展示

    最终,我们收到如下邮件:
    效果图

    总结

    Spring Boot 针对 Thymeleaf 提供了一整套的自动化配置方案,这对我们在 SpringBoot 中使用 Thymeleaf 更加方便,SpringBoot 为我们提供了默认配置,我们也可以对其进行个性化配置

    以上就是我们在学习 SpringBoot 整合 Thymeleaf 时的一些知识点,更多内容请访问:Thymeleaf 官方文档

    Thymeleaf 的官方文档:https://www.thymeleaf.org
    

    如您在阅读中发现不足,欢迎留言!!!

    展开全文
  • thymeleaf --------- To learn more and download latest version: http://www.thymeleaf.org
  • thymeleaf th:if 判断表达式

    万次阅读 多人点赞 2018-01-13 16:36:42
    thymeleaf 判断表达式注意: gt:great than(大于)&gt; ge:great equal(大于等于)&gt;= eq:equal(等于)== lt:less than(小于)&lt; le:less equal(小于等于)&lt;= ne:not equal...
  • Thymeleaf

    2020-09-25 09:14:11
    thymeleaf介绍 Springboot整合thymeleaf 修改Thymeleaf默认的前缀后缀
  • thymeleaf 遍历

    2020-08-09 09:57:21
    thymeleaf遍历
  • thymeleaf 日志

    2020-08-12 16:11:56
    thymeleaf日志
  • thymeleaf 注释

    2020-08-12 10:19:09
    thymeleaf注释
  • using thymeleaf.pdf

    2020-09-22 21:02:02
    thymeleaf的使用thymeleaf的使用thymeleaf的使用thymeleaf的使用thymeleaf的使用thymeleaf的使用thymeleaf的使用thymeleaf的使用thymeleaf的使用thymeleaf的使用thymeleaf的使用
  • thymeleaf-spring:用于Spring的Thymeleaf集成模块
  • thymeleaf.zip

    2020-02-07 18:52:53
    Thymeleaf简介 Thymeleaf是适用于Web和独立环境的现代服务器端Java模板引擎。 Thymeleaf的主要目标是为您的开发工作流程带来优雅的自然模板 -HTML可以在浏览器中正确显示,也可以作为静态原型工作,从而可以在...
  • thymeleaf使用文档

    2018-06-06 15:52:56
    thymeleaf官方使用文档,thymeleaf官方使用文档,thymeleaf官方使用文档
  • Thymeleaf使用

    2020-09-22 17:39:19
    文档地址:https://raledong.gitbooks.io/using-thymeleaf/content/ 官网地址:https://www.thymeleaf.org/ thymeleaf在github的地址:https://github.com/thymeleaf/thymeleaf
  • 而在这些前端模板引擎中,SpringBoot首推使用Thymeleaf。这是因为Thymeleaf对SpringMVC提供了完美的支持。Thymeleaf简介Thymeleaf同样是一个Java类库,能够处理HTML/HTML5、XML、JavaScript、CSS,甚⾄纯⽂本。通常...
  • thymeleaf documentation

    2019-09-19 14:24:32
    thymeleaf 的API: http://www.thymeleaf.org/apidocs/thymeleaf/2.0.12/org/thymeleaf/expression/Aggregates.html thymeleaf 的参考文档: http://www.thymeleaf...
  • Thymeleaf是一个模板引擎,主要用于HTML,也可以用在XML,JavaScript,CSS甚⾄纯⽂本等。Thymeleaf模板引擎可以使html文件达到类似jsp(jsp运行时需要转成...在spring boot中使用Thymeleaf的主要作用:可以直接访问...
  • thymeleaf依赖

    千次阅读 2020-04-09 17:10:37
    <dependency>...org.thymeleaf</groupId> <artifactId>thymeleaf-spring5</artifactId> </dependency> <dependency> <groupId>org.thymeleaf.extras<...
  • eclipse thymeleaf插件

    2018-02-22 09:14:24
    eclipse的thymeleaf插件 用于编写thymeleaf时候代码提示
  • Eclipse Thymeleaf 插件

    2017-11-06 15:53:07
    Eclipse Spring Tool Suite Thymeleaf 插件 Thymeleaf 代码提示
  • thymeleaf教程

    千次阅读 2018-09-16 13:48:19
    thymeleaf的定义 spring boot整合 thymeleaf语法参考文档 thymeleaf笔记 thymeleaf比jsp好在哪 thymeleaf简单文件 thymeleaf配置 application.properties thymeleaf url thymeleaf表达式 themeleaf包含 footer ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 36,938
精华内容 14,775
热门标签
关键字:

thymeleaf