-
Thymeleaf
2020-04-18 14:46:31文章目录Thymeleaf快速入门1.为什么是Thymeleaf?2.提供数据3.引入启动器4.静态页面测试6.模板缓存 Thymeleaf快速入门 SpringBoot并不推荐使用jsp,但是支持一些模板引擎技术: 1.为什么是Thymeleaf? 简单说, ...
Thymeleaf快速入门
SpringBoot并不推荐使用jsp,但是支持一些模板引擎技术:
1.为什么是Thymeleaf?
简单说, Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP 。相较于其他的模板引擎,它有如下四个极吸引人的特点:
- 动静结合:Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。这是由于它支持 html 原型,然后在 html 标签里增加额外的属性来达到模板+数据的展示方式。浏览器解释 html 时会忽略未定义的标签属性,所以 thymeleaf 的模板可以静态地运行;当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动态显示。
- 开箱即用:它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果,避免每天套模板、改jstl、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。
- 多方言支持:Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。
- 与SpringBoot完美整合,SpringBoot提供了Thymeleaf的默认配置,并且为Thymeleaf设置了视图解析器,我们可以像以前操作jsp一样来操作Thymeleaf。代码几乎没有任何区别,就是在模板语法上有区别。
接下来,我们就通过入门案例来体会Thymeleaf的魅力:
2.提供数据
编写一个controller方法,返回一些用户数据,放入模型中,将来在页面渲染
@GetMapping("/list") public String all(ModelMap model) { // 查询用户 List<User> users = this.userService.queryAll(); // 放入模型 model.addAttribute("users", users); // 返回模板名称(就是classpath:/templates/目录下的html文件名) return "users"; }
3.引入启动器
直接引入启动器:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> //springboot默认导入的是2.1.6版本 </dependency> 切换thymeleaf为3.0.9版本 <properties> <thymeleaf.version>3.0.9.RELEASE</thymeleaf.version> <!‐‐ 布局功能的支持程序 thymeleaf3主程序 layout2以上版本 ‐‐> <!‐‐ thymeleaf2 layout1 选择正确的设配包‐‐> <thymeleaf‐layout‐dialect.version>2.2.2</thymeleaf‐layout‐dialect.version> </properties>
SpringBoot会自动为Thymeleaf注册一个视图解析器:
与解析JSP的InternalViewResolver类似,Thymeleaf也会根据前缀和后缀来确定模板文件的位置:
- 默认前缀:
classpath:/templates/
- 默认后缀:
.html
所以如果我们返回视图:
users
,会指向到classpath:/templates/users.html
一般我们无需进行修改,默认即可。
4.静态页面
根据上面的文档介绍,模板默认放在classpath下的templates文件夹,我们新建一个html文件放入其中:
编写html模板,渲染模型中的数据:
注意,把html 的名称空间,改成:
xmlns:th="http://www.thymeleaf.org"
会有语法提示<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>首页</title> <style type="text/css"> table {border-collapse: collapse; font-size: 14px; width: 80%; margin: auto} table, th, td {border: 1px solid darkslategray;padding: 10px} </style> </head> <body> <div style="text-align: center"> <span style="color: darkslategray; font-size: 30px">欢迎光临!</span> <hr/> <table class="list"> <tr> <th>id</th> <th>姓名</th> <th>用户名</th> <th>年龄</th> <th>性别</th> <th>生日</th> </tr> <tr th:each="user : ${users}"> <td th:text="${user.id}">1</td> <td th:text="${user.name}">张三</td> <td th:text="${user.userName}">zhangsan</td> <td th:text="${user.age}">20</td> <td th:text="${user.sex}">男</td> <td th:text="${user.birthday}">1980-02-30</td> </tr> </table> </div> </body> </html>
我们看到这里使用了以下语法:
${}
:这个类似与el表达式,但其实是ognl的语法,比el表达式更加强大th-
指令:th-
是利用了Html5中的自定义属性来实现的。如果不支持H5,可以用data-th-
来代替th:each
:类似于c:foreach
遍历集合,但是语法更加简洁th:text
:声明标签中的文本- 例如
<td th-text='${user.id}'>1</td>
,如果user.id有值,会覆盖默认的1 - 如果没有值,则会显示td中默认的1。这正是thymeleaf能够动静结合的原因,模板解析失败不影响页面的显示效果,因为会显示默认值!
- 例如
测试
接下来,我们打开页面测试一下:
6.模板缓存
Thymeleaf会在第一次对模板解析之后进行缓存,极大的提高了并发处理能力。但是这给我们开发带来了不便,修改页面后并不会立刻看到效果,我们开发阶段可以关掉缓存使用:
# 开发阶段关闭thymeleaf的模板缓存 spring.thymeleaf.cache=false
注意:
在Idea中,我们需要在修改页面后按快捷键:`Ctrl + Shift + F9` 对项目进行rebuild才可以。 eclipse中没有测试过。
我们可以修改页面,测试一下。
Thymeleaf整合Bootstrap
- pom.xml
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <thymeleaf.version>3.0.11.RELEASE</thymeleaf.version> <!-- 布局功能的支持程序 thymeleaf3主程序 layout2以上版本 --> <!-- thymeleaf2 layout1--> <thymeleaf-layout-dialect.version>2.2.2</thymeleaf-layout-dialect.version> </properties> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <!--引入jquery-webjar--> <dependency> <groupId>org.webjars</groupId> <artifactId>jquery</artifactId> <version>3.3.1</version> </dependency> <!--引入bootstrap--> <dependency> <groupId>org.webjars</groupId> <artifactId>bootstrap</artifactId> <version>4.0.0</version> </dependency>
- SpringBoot对静态资源的映射规则
index.html
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="description" content=""> <meta name="author" content=""> <title>Signin Template for Bootstrap</title> <!-- Bootstrap core CSS --> <!-- 公共资源用/webjars引入 自己的资源引入asserts--> <link href="asserts/css/bootstrap.min.css" th:href="@{/webjars/bootstrap/4.0.0/css/bootstrap.css}" rel="stylesheet"> <!-- Custom styles for this template --> <link href="asserts/css/signin.css" th:href="@{/asserts/css/signin.css}" rel="stylesheet"> </head> <body class="text-center"> <form class="form-signin" action="dashboard.html" th:action="@{/user/login}" method="post"> <img class="mb-4" th:src="@{/asserts/img/bootstrap-solid.svg}" src="asserts/img/bootstrap-solid.svg" alt="" width="72" height="72"> <h1 class="h3 mb-3 font-weight-normal" th:text="#{login.tip}">Please sign in</h1> <!--判断--> <p style="color: red" th:text="${msg}" th:if="${not #strings.isEmpty(msg)}"></p> <label class="sr-only" th:text="#{login.username}">Username</label> <input type="text" name="username" class="form-control" placeholder="Username" th:placeholder="#{login.username}" required="" autofocus=""> <label class="sr-only" th:text="#{login.password}">Password</label> <input type="password" name="password" class="form-control" placeholder="Password" th:placeholder="#{login.password}" required=""> <div class="checkbox mb-3"> <label> <input type="checkbox" value="remember-me"/> [[#{login.remember}]] </label> </div> <button class="btn btn-lg btn-primary btn-block" type="submit" th:text="#{login.btn}">Sign in</button> <p class="mt-5 mb-3 text-muted">© 2020-2021</p> <a class="btn btn-sm" th:href="@{/index.html(l='zh_CN')}">中文</a> <a class="btn btn-sm" th:href="@{/index.html(l='en_US')}">English</a> </form> </body> </html>
参考
-
thymeleaf
2018-05-15 15:18:59thymeleaf TEXT MODEpublic class ThymeTemplate { private ThymeTemplate(){ } public static String merge(Map<String,Object> 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:13Thymeleaf 模板引擎 官方文档下载 Hello World 新建应用 后台控制器 前端页面 浏览器访问测试 Thymeleaf 模板引擎 1、Thymeleaf 是 Web 和独立环境的现代服务器端 Java 模板引擎,能够处理HTML,XML,...目录
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资料
2019-03-21 22:19:02介绍Thymeleaf的PPT,思维导图,还有一个整合了Thymeleaf的springBoot的简单示例。 -
thymeleaf --------- To learn more and download latest version: http://www.thymeleaf.org
-
【SpringBoot】三、SpringBoot中整合Thymeleaf
2020-04-16 21:41:09SpringBoot 为我们提供了 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 使用方式类似,效果如图:
我们还通过 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 遍历
2020-08-09 09:57:21thymeleaf遍历 -
thymeleaf 缓存
2020-08-12 16:37:04thymeleaf缓存 -
thymeleaf 注释
2020-08-12 10:19:09thymeleaf注释 -
using thymeleaf.pdf
2020-09-22 21:02:02thymeleaf的使用thymeleaf的使用thymeleaf的使用thymeleaf的使用thymeleaf的使用thymeleaf的使用thymeleaf的使用thymeleaf的使用thymeleaf的使用thymeleaf的使用thymeleaf的使用 -
thymeleaf使用文档
2018-06-06 15:52:56thymeleaf官方使用文档,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 -
thymeleaf文档_SpringBoot集成Thymeleaf
2020-12-10 14:36:33而在这些前端模板引擎中,SpringBoot首推使用Thymeleaf。这是因为Thymeleaf对SpringMVC提供了完美的支持。Thymeleaf简介Thymeleaf同样是一个Java类库,能够处理HTML/HTML5、XML、JavaScript、CSS,甚⾄纯⽂本。通常... -
thymeleaf documentation
2019-09-19 14:24:32thymeleaf 的API: http://www.thymeleaf.org/apidocs/thymeleaf/2.0.12/org/thymeleaf/expression/Aggregates.html thymeleaf 的参考文档: http://www.thymeleaf... -
Thymeleaf入门
2019-08-13 22:02:08文章目录Thymeleaf简介Thymeleaf相关网页Thymeleaf使用导包原理语法示例练习一练习二Thymeleaf总结 Thymeleaf简介 Thymeleaf是一种用于Web和独立环境的现代服务器端的Java模板引擎。 Thymeleaf的主要目标是将优雅的... -
eclipse thymeleaf插件
2018-02-22 09:14:24eclipse的thymeleaf插件 用于编写thymeleaf时候代码提示 -
thymeleaf教程
2018-09-16 13:48:19thymeleaf的定义 spring boot整合 thymeleaf语法参考文档 thymeleaf笔记 thymeleaf比jsp好在哪 thymeleaf简单文件 thymeleaf配置 application.properties thymeleaf url thymeleaf表达式 themeleaf包含 footer ... -
02thymeleaf
2019-09-21 09:55:38常用的有jsp,freemarker,Thymeleaf spring boot 默认不支持jsp 思想 Thymeleaf 引入 org.springframework.boot spring-boot-starter-thymeleaf 版本替换 修改thymeleaf 注意布局版本对应 thymeleaf ... -
Eclipse Thymeleaf 插件
2017-11-06 15:53:07Eclipse Spring Tool Suite Thymeleaf 插件 Thymeleaf 代码提示 -
-
Thymeleaf简介
2020-06-05 17:07:01Thymeleaf简介 Thymeleaf简介 Thymeleaf是一个流行的模板引擎,该模板引擎采用Java语言开发,模板引擎是一个技术名词,是跨领域跨平台的概念,在Java语言体系下有模板引擎,在C#、PHP语言体系下也有模板引擎。除了... -
thymeleaf依赖
2020-04-09 17:10:37<dependency>...org.thymeleaf</groupId> <artifactId>thymeleaf-spring5</artifactId> </dependency> <dependency> <groupId>org.thymeleaf.extras<... -
Thymeleaf 入门
2019-08-20 08:19:55Thymeleaf配置: spring.thymeleaf.mode=LEGACYHTML5 spring.thymeleaf.cache=false spring.thymeleaf.prefix=classpath:/static/ spring.thymeleaf.suffix=.html spring默认的模板映射路径是:src/... -
thymeleaf中文API
2018-08-23 13:55:24thymeleaf-3.0.5.RELEASE中文API,Thymeleaf是⾯向Web和独⽴环境的现代服务器端Java模板引擎,能够处 理HTML,XML,JavaScript,CSS甚⾄纯⽂本。 Thymeleaf旨在提供⼀个优雅的、⾼度可维护的创建模板的⽅式。 为了实 ... -
JAVA - Thymeleaf
2020-07-27 22:24:30spring 集成了 Thymeleaf 模板引擎,本文对此作些许介绍 方言 Thymeleaf 提供了灵活接口,允许使用方定制自己的方言。因此在自定义方言之前,有必要先了解标准方言。 标准表达式 ${…} : 变量表达式. *{…} : 区域...
-
SIEMENS-西门子屏幕程序下载时提示缺少面板映像的解决办法.txt
-
基于Django的电子商务网站设计--第九章 Python在线题库
-
一种改进的多符号检测算法
-
【Redis】数据结构学习笔记
-
一种宽带零中频收发前端设计
-
基于单片机和FPGA的空间材料高温炉控制系统
-
RHCE-Day02
-
WEB安全渗透测试1-Msql基础
-
微信公众号2021之网页授权一学就会java版
-
2021-1小时Django和Mysql数据库操作入门教程(新手入门)
-
架构师之路
-
智能互联柔性生产线实训设备
-
2021-01-28
-
基于LabVIEW的中频电源电能质量分析测试系统设计
-
沐风老师Scratch3.0快速入门视频教程
-
从adapter中获取某控件宽高
-
Python语言编程高级精讲课 从程序员到架构师的必修课
-
浏览器保存密码后自动填充问题
-
ZylTimers.7z
-
css3有哪些新特性