Thymeleaf是个XML/XHTML/HTML5模板引擎,可以用于Web与非Web应用。

Thymeleaf的主要目标在于提供一种可被浏览器正确显示的、格式良好的模板创建方式,因此也可以用作静态建模。你可以使用它创建经过验证的 XML与HTML模板。相对于编写逻辑或代码,开发者只需将标签属性添加到模板中即可。接下来,这些标签属性就会在DOM(文档对象模型)上执行预先制定 好的逻辑。Thymeleaf的可扩展性也非常棒。你可以使用它定义自己的模板属性集合,这样就可以计算自定义表达式并使用自定义逻辑。这意味着 Thymeleaf还可以作为模板引擎框架。

Thymeleaf的模板还可以用作工作原型,Thymeleaf会在运行期替换掉静态值。例如下面的html文件,当作为静态文件 时,product name显示为Red Chair,当运行在容器中并提供product这个对象时,product name的值会自动替换为product.description对应的值。

1.bean值替换
 1 <!DOCTYPE html>
2 <html xmlns:th="http://www.thymeleaf.org">
3 <head>
4 <title>Thymeleaf tutorial: exercise 2</title>
5 <link rel="stylesheet" href="../../../css/main-static.css" th:href="@{/css/main.css}" />
6 <meta charset="utf-8" />
7 </head>
8 <body>
9 <h1>Thymeleaf tutorial - Answer for exercise 1: bean values</h1>
10 <h2>Product information</h2>
11 <dl>
12 <dt>Product name</dt>
13 <dd th:text="${product.description}">Red Chair</dd>
14
15 <dt>Product price</dt>
16 <dd th:text="${product.price}">350</dd>
17
18 <dt>Product available from</dt>
19 <dd th:text="${product.availableFrom}">2014-12-01</dd>
20 </dl>
21 </body>
22 </html>
2.简单数据转换(数字,日期)
 1 <!DOCTYPE html>
2 <html xmlns:th="http://www.thymeleaf.org">
3 <head>
4 <title>Thymeleaf tutorial: exercise 2</title>
5 <link rel="stylesheet" href="../../../css/main-static.css" th:href="@{/css/main.css}" />
6 <meta charset="utf-8" />
7 </head>
8 <body>
9 <h1>Thymeleaf tutorial - Answer for exercise 2: bean values</h1>
10 <h2>Product information</h2>
11 <dl>
12 <dt>Product name</dt>
13 <dd th:text="${product.description}">red Chair</dd>
14
15 <dt>Product price</dt>
16 <dd th:text="${#numbers.formatDecimal(product.price, 1, 2)}">180</dd>
17
18 <dt>Product available from</dt>
19 <dd th:text="${#dates.format(product.availableFrom, 'yyyy-MM-dd')}">2014-12-01</dd>
20 </dl>
21 </body>
22 </html>
3.字符串拼接
 1 <!DOCTYPE html>
2 <html xmlns:th="http://www.thymeleaf.org">
3 <head>
4 <title>Thymeleaf tutorial: exercise 3</title>
5 <link rel="stylesheet" href="../../../css/main-static.css" th:href="@{/css/main.css}" />
6 <meta charset="utf-8" />
7 </head>
8 <body>
9 <h1>Thymeleaf tutorial - Answer for exercise 3: string concatenation</h1>
10 <h2>Product information</h2>
11 <dl>
12 <dt>Product price</dt>
13 <dd th:text="${'$'+product.price}">235</dd>
14 </dl>
15 </body>
16 </html>
4.国际化
 1 <!DOCTYPE html>
2 <html xmlns:th="http://www.thymeleaf.org">
3 <head>
4 <title th:text="#{tutorial.exercise4}">Thymeleaf tutorial: exercise 4</title>
5 <link rel="stylesheet" href="../../../css/main-static.css" th:href="@{/css/main.css}" />
6 <meta charset="utf-8" />
7 </head>
8 <body>
9 <h1 th:text="#{tutorial.exercise4}">Thymeleaf tutorial - Solution for exercise 4: internationalization</h1>
10 <h2 th:text="#{product.info}">Product information</h2>
11 <dl>
12 <dt th:text="#{product.name}">Product name</dt>
13 <dd th:text="${product.description}">Red chair</dd>
14
15 <dt th:text="#{product.price}">Product price</dt>
16 <dd th:text="${#numbers.formatDecimal(product.price, 1, 2)}">350</dd>
17
18 <dt th:text="#{product.available}">Product available from</dt>
19 <dd th:text="${#dates.format(product.availableFrom, 'dd-MMM-yyyy')}">28-Jun-2013</dd>
20 </dl>
21 </body>
22 </html>

此时html需要相应的配置文件。例如如下配置文件:

en:

tutorial.exercise4=Thymeleaf tutorial - exercise 4: internationalization
product.info=Product information
product.name=Product name
product.price=Product price
product.available=Product available from
back=Back

fr

tutorial.exercise4=Tutorial De Thymeleaf - exercice 4: l'internationalisation
product.info=Information du produit
product.name=Nom du produit
product.price=Prix du produit
product.available=Produit disponible depuis
back=Revenir
5.转义和非转义文本
 1 <!DOCTYPE html>
2 <html xmlns:th="http://www.thymeleaf.org">
3 <head>
4 <title>Thymeleaf tutorial: exercise 5</title>
5 <link rel="stylesheet" href="../../../css/main-static.css" th:href="@{/css/main.css}" />
6 <meta charset="utf-8" />
7 </head>
8 <body>
9 <h1>Thymeleaf tutorial - Solution for exercise 5: escaped and unescaped text</h1>
10 <div th:text="${html}">
11 Some escaped text
12 </div>
13 <div th:utext="${html}">
14 Some unescaped text
15 </div>
16 </body>
17 </html>

上述两个div分别生成的html代码为

<div>This is an &lt;em&gt;HTML&lt;/em&gt; text. &lt;b&gt;Enjoy yourself!&lt;/b&gt;</div>
<div>This is an <em>HTML</em> text. <b>Enjoy yourself!</b></div>
6.迭代
 1 <!DOCTYPE html>
2 <html xmlns:th="http://www.thymeleaf.org">
3 <head>
4 <title>Thymeleaf tutorial: exercise 6</title>
5 <link rel="stylesheet" href="../../../css/main-static.css" th:href="@{/css/main.css}" />
6 <meta charset="utf-8" />
7 </head>
8 <body>
9 <h1>Thymeleaf tutorial - Answer for exercise 6: iteration</h1>
10 <h2>Product list</h2>
11 <table>
12 <thead>
13 <tr>
14 <th>Description</th>
15 <th>Price</th>
16 <th>Available from</th>
17 </tr>
18 </thead>
19 <tbody th:remove="all-but-first">
20 <tr th:each="product:${productList}">
21 <td th:text="${product.description}">Red Chair</td>
22 <td th:text="${'$' + #numbers.formatDecimal(product.price, 1, 2)}">$123</td>
23 <td th:text="${#dates.format(product.availableFrom, 'yyyy-MM-dd')}">2014-12-01</td>
24 </tr>
25 <tr>
26 <td>White table</td>
27 <td>$200</td>
28 <td>15-Jul-2013</td>
29 </tr>
30 <tr>
31 <td>Reb table</td>
32 <td>$200</td>
33 <td>15-Jul-2013</td>
34 </tr>
35 <tr>
36 <td>Blue table</td>
37 <td>$200</td>
38 <td>15-Jul-2013</td>
39 </tr>
40 </tbody>
41 </table>
42 </body>
43 </html>
7.迭代统计
 1 <!DOCTYPE html>
2 <html xmlns:th="http://www.thymeleaf.org">
3 <head>
4 <title>Thymeleaf tutorial: exercise 7</title>
5 <link rel="stylesheet" href="../../../css/main-static.css" th:href="@{/css/main.css}" />
6 <meta charset="utf-8" />
7 </head>
8 <body>
9 <h1>Thymeleaf tutorial - Solution for exercise 7: iteration stats</h1>
10 <h2>Product list</h2>
11 <table>
12 <thead>
13 <tr>
14 <th>Index</th>
15 <th>Description</th>
16 <th>Price</th>
17 <th>Available from</th>
18 </tr>
19 </thead>
20 <tbody th:remove="all-but-first">
21 <tr th:each="product : ${productList}">
22 <td th:text="${productStat.count}">1</td>
23 <td th:text="${product.description}">Red chair</td>
24 <td th:text="${'$' + #numbers.formatDecimal(product.price, 1, 2)}">$350</td>
25 <td th:text="${#dates.format(product.availableFrom, 'dd-MMM-yyyy')}">28-Jun-2013</td>
26 </tr>
27 <tr>
28 <td>2</td>
29 <td>White table</td>
30 <td>$200</td>
31 <td>15-Jul-2013</td>
32 </tr>
33 <tr>
34 <td>3</td>
35 <td>Reb table</td>
36 <td>$200</td>
37 <td>15-Jul-2013</td>
38 </tr>
39 <tr>
40 <td>4</td>
41 <td>Blue table</td>
42 <td>$200</td>
43 <td>15-Jul-2013</td>
44 </tr>
45 </tbody>
46 </table>
47 </body>
48 </html>
8.条件判断
 1 <!DOCTYPE html>
2 <html xmlns:th="http://www.thymeleaf.org">
3 <head>
4 <title>Thymeleaf tutorial: exercise 8</title>
5 <link rel="stylesheet" href="../../../css/main-static.css" th:href="@{/css/main.css}" />
6 <meta charset="utf-8" />
7 </head>
8 <body>
9 <h1>Thymeleaf tutorial - Answer for exercise 8: conditions</h1>
10 <h2>Product list</h2>
11 <table>
12 <thead>
13 <tr>
14 <th>Description</th>
15 <th>Price</th>
16 <th>Available from</th>
17 <th></th>
18 </tr>
19 </thead>
20 <tbody>
21 <tr th:each="product : ${productList}">
22 <td th:text="${product.description}">Red chair</td>
23 <td th:text="${'$' + #numbers.formatDecimal(product.price, 1, 2)}">$350</td>
24 <td th:text="${#dates.format(product.availableFrom, 'dd-MMM-yyyy')}">28-Jun-2013</td>
25 <td>
26 <span th:if="${product.price lt 100}" class="offer">Special offer!</span>
27 </td>
28 </tr>
29 </tbody>
30 </table>
31 </body>
32 </html>
9.更多条件判断
 1 <!DOCTYPE html>
2 <html xmlns:th="http://www.thymeleaf.org">
3 <head>
4 <title>Thymeleaf tutorial: exercise 9</title>
5 <link rel="stylesheet" href="../../../css/main-static.css" th:href="@{/css/main.css}" />
6 <meta charset="utf-8" />
7 </head>
8 <body>
9 <h1>Thymeleaf tutorial - Answer for exercise 9: more on conditions</h1>
10 <h2>Customer list</h2>
11 <table>
12 <thead>
13 <tr>
14 <th>First name</th>
15 <th>Last name</th>
16 <th>Gender</th>
17 <th>Payment method</th>
18 <th>Balance</th>
19 </tr>
20 </thead>
21 <tbody th:remove="all-but-first">
22 <tr th:each="customer : ${customerList}">
23 <td th:text="${customer.firstName}">Peter</td>
24 <td th:text="${customer.lastName}">Jackson</td>
25 <!--
26 Use th:switch for selecting content based on ${customer.gender}.
27 As genre can be null if unknown, better use ${customer.gender?.name()}
28 for obtaining its name.
29 -->
30 <td th:switch="${customer.gender?.name()}">
31 <img th:case="'MALE'" src="../../../images/male.png" th:src="@{/images/male.png}" alt="Male" /> <!-- Use "/images/male.png" image -->
32 <img th:case="'FEMALE'" src="../../../images/female.png" th:src="@{/images/female.png}" alt="Female" /> <!-- Use "/images/female.png" image -->
33 <span th:case="*">Unknown</span>
34 </td>
35 <td>
36 <span th:text="${customer.paymentMethod.description}">Direct debit</span>
37 <!-- Show next message only when paymentMethod is not CREDIT_CARD -->
38 <span th:unless="${customer.paymentMethod.name() == 'CREDIT_CARD'}" class="warn">
39 Payment must be done in the next 4 days
40 </span>
41 </td>
42 <!-- Add class="enhanced" when balance is greater than 10000 -->
43 <td th:class="${customer.balance gt 10000} ? 'enhanced'" th:text="${customer.balance}">350</td>
44 </tr>
45 <tr>
46 <td>Mary</td>
47 <td>Johanson</td>
48 <td><img src="../../../images/female.png" /></td>
49 <td><span>Credit card</span></td>
50 <td>5000</td>
51 </tr>
52 <tr>
53 <td>Robert</td>
54 <td>Allen</td>
55 <td><img src="../../../images/male.png" /></td>
56 <td>
57 <span>Credit card</span>
58 <span class="warn">Payment must be done in the next 4 days</span>
59 </td>
60 <td class="enhanced">50000</td>
61 </tr>
62 </tbody>
63 </table>
64 </body>
65 </html>
10.Spring表达式语言
 1 <!DOCTYPE html>
2 <html xmlns:th="http://www.thymeleaf.org">
3 <head>
4 <title>Thymeleaf tutorial: exercise 10</title>
5 <link rel="stylesheet" href="../../../css/main-static.css" th:href="@{/css/main.css}" />
6 <meta charset="utf-8" />
7 </head>
8 <body>
9 <h1>Thymeleaf tutorial - Solution for exercise 10: Spring Expression language</h1>
10
11 <h2>Arithmetic expressions</h2>
12 <p class="label">Four multiplied by minus six multiplied by minus two module seven:</p>
13 <p class="answer" th:text="${4 * -6 * -2 % 7}">123</p>
14
15 <h2>Object navigation</h2>
16 <p class="label">Description field of paymentMethod field of the third element of customerList bean:</p>
17 <p class="answer" th:text="${customerList[2].paymentMethod.description}">Credit card</p>
18
19 <h2>Object instantiation</h2>
20 <p class="label">Current time milliseconds:</p>
21 <p class="answer" th:text="${new java.util.Date().getTime()}">22-Jun-2013</p>
22
23 <h2>T operator</h2>
24 <p class="label">Random number:</p>
25 <p class="answer" th:text="${T(java.lang.Math).random()}">123456</p>
26 </body>
27 </html>
11.超链接
 1 <!DOCTYPE html>
2 <html xmlns:th="http://www.thymeleaf.org">
3 <head>
4 <title>Thymeleaf tutorial: exercise 11</title>
5 <link rel="stylesheet" href="../../../css/main-static.css" th:href="@{/css/main.css}" />
6 <meta charset="utf-8" />
7 </head>
8 <body>
9 <h1>Thymeleaf tutorial - Answer for exercise 11: links</h1>
10 <h2>Product actions</h2>
11 <ul>
12 <li><a href="#" th:href="@{/exercise11/product.html(action='view')}">View product</a></li>
13 <li><a href="#" th:href="@{/exercise11/product.html(action='edit')}">Edit product</a></li>
14 </ul>
15 </body>
16 </html>
12.表单
 1 <!DOCTYPE html>
2 <html xmlns:th="http://www.thymeleaf.org">
3 <head>
4 <title>Thymeleaf tutorial: exercise 12</title>
5 <link rel="stylesheet" href="../../../css/main-static.css" th:href="@{/css/main.css}" />
6 <meta charset="utf-8" />
7 </head>
8 <body>
9 <h1>Thymeleaf tutorial - Solution for exercise 12: forms</h1>
10 <h2>Customer edition</h2>
11 <form action="saveCustomer.html" th:action="@{/exercise12/saveCustomer.html}" th:object="${customer}" method="post">
12 <input type="hidden" th:field="*{id}" />
13
14 <label for="firstName">First name:</label>
15 <input type="text" th:field="*{firstName}" value="John" />
16
17 <label for="lastName">Last name:</label>
18 <input type="text" th:field="*{lastName}" value="Wayne" />
19
20 Genre:
21 <div th:each="gender : ${genders}" class="radio">
22 <input type="radio" th:value="${gender}" th:field="*{gender}" />
23 <label th:for="${#ids.prev('gender')}" th:text="${gender.description}">Male</label>
24 </div>
25 <div th:remove="all" class="radio">
26 <input type="radio" />
27 <label>Female</label>
28 </div>
29
30 <label for="paymentMethod">Payment method:</label>
31 <select th:field="*{paymentMethod}" th:remove="all-but-first">
32 <option th:each="paymentMethod : ${paymentMethods}"
33 th:value="${paymentMethod}" th:text="${paymentMethod.description}">Credit card</option>
34 <option>Another payment method</option>
35 <option>Another payment method</option>
36 </select>
37
38 <label for="balance">Balance (dollars):</label>
39 <input type="text" th:field="*{balance}" size="10" value="2500" />
40
41 <input type="submit" />
42 </form>
43 </body>
44 </html>
13.内联
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Thymeleaf tutorial: exercise 13</title>
<link rel="stylesheet" href="../../../css/main-static.css" th:href="@{/css/main.css}" />
<meta charset="utf-8" />
</head>
<body>
<h1>Thymeleaf tutorial - Solution for exercise 13: inlining</h1>
<h2>Birthday email</h2>
<form action="#" method="post">
<label for="body">Message body:</label>
<textarea id="body" name="body" th:inline="text">
Dear [[${customerName}]], it is our sincere pleasure to congratulate your in your birthday:
Happy birthday [[${customerName}]]!!! See you soon, [[${customerName}]]. Regards,
The Thymeleaf team
</textarea>
<input type="submit" value="Send mail" />
</form>
</body>
</html>

--------------------------------------------------------------------------------------------------------------

以上资料都来自http://itutorial.thymeleaf.org/。如果对Thymeleaf有兴趣,可以试试他们做的交互教程,很是好用。上面的html代码都是来自thymeleaf的交互教程

Thymeleaf基本知识的更多相关文章

  1. Thymeleaf基础知识

    Thymeleaf是一个Java类库,它是一个xml/xhtml/html5的模板引擎,可以作为MVC的Web引用的View层. Thymeleaf还提供了额外的模块与SpringMVC集成,因此推荐 ...

  2. Thymeleaf基本知识(推荐)

    原文: http://blog.csdn.net/pdw2009/article/details/44700897 Thymeleaf是个XML/XHTML/HTML5模板引擎,可以用于Web与非We ...

  3. thymeleaf小知识

    1.根据不同性别,显明不同的默认图片:th:if th:src   图片路径 <img th:if="${gender=='男'}" id="admission_p ...

  4. spring boot(四):thymeleaf使用详解

    在上篇文章springboot(二):web综合开发中简单介绍了一下thymeleaf,这篇文章将更加全面详细的介绍thymeleaf的使用.thymeleaf 是新一代的模板引擎,在spring4. ...

  5. springboot(四):thymeleaf使用详解

    在上篇文章springboot(二):web综合开发中简单介绍了一下thymeleaf,这篇文章将更加全面详细的介绍thymeleaf的使用.thymeleaf 是新一代的模板引擎,在spring4. ...

  6. thymeleaf模板的使用(转)

    作者:纯洁的微笑 出处:http://www.ityouknow.com/ 在上篇文章springboot(二):web综合开发中简单介绍了一下thymeleaf,这篇文章将更加全面详细的介绍thym ...

  7. springboot: thymeleaf 使用详解

    springboot:thymeleaf,这篇文章将更加全面详细的介绍thymeleaf的使用.thymeleaf 是新一代的模板引擎,在spring4.0中推荐使用thymeleaf来做前端模版引擎 ...

  8. Spring Boot(四):Thymeleaf 使用详解

    在上篇文章Spring Boot (二):Web 综合开发中简单介绍了一下 Thymeleaf,这篇文章将更加全面详细的介绍 Thymeleaf 的使用.Thymeleaf 是新一代的模板引擎,在 S ...

  9. (转)Spring Boot(四):Thymeleaf 使用详解

    http://www.ityouknow.com/springboot/2016/05/01/spring-boot-thymeleaf.html 在上篇文章Spring Boot (二):Web 综 ...

随机推荐

  1. iOS static

    获得20条news 先实现,再提取到business 层. The static Keyword You can have a local variable retain its value thro ...

  2. AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(二):配置WinClient分布式运行环境

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

  3. hdu 4039 2011成都赛区网络赛I ***

    两层搜索,直接for循环就行了,还要注意不能是自己的朋友 #include<cstdio> #include<iostream> #include<algorithm&g ...

  4. ASP.NET 5 Beta8发布及升级经验

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:ASP.NET 5 Beta8如期发布,这是一个重要的里程碑,因为这是ASP.NET ...

  5. document.body / document.ducumentElement /等获取高度和宽度的区别 ----转载

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  6. Java eclipse下 Ant build.xml实例详解

    在有eclipse集成环境下ant其实不是很重要,但有些项目需要用到,另外通过eclipse来学习和理解ant是个很好的途径,所以写他demo总结下要点,希望能够帮到大家. 一.本人测试环境eclip ...

  7. 【转】Struts2解决表单重复提交问题

    用户重复提交表单在某些场合将会造成非常严重的后果.例如,在使用信用卡进行在线支付的时候,如果服务器的响应速度太慢,用户有可能会多次点击提交按钮,而这可能导致那张信用卡上的金额被消费了多次.因此,重复提 ...

  8. SQL详解(上)

    SQL 什么是SQL:结构化查询语言(Structured Query Language).SQL标准(例如SQL99,即1999年制定的标准): 由国际标准化组织(ISO)制定的,对DBMS的统一操 ...

  9. loadrunner通过C语言实现字符的替换(只能替换单个字符,慎用)

    如果按照普通的定义字符串就会出现以下错误: 解决方法如下: 将双引号改成单引号: lr_searchReplace(abc,"test",' ','+'); Action也可以这些 ...

  10. express-1 从Node开始

    hello world var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, { ...