Thymeleaf通过特殊的标签来寻找属于Thymeleaf的部分,并渲染该部分内容,Thymeleaf也主要通过标签来识别替换对应位置内容,Thymeleaf标签有很多很多,功能也很丰富,这里比较常用的标签如下:
标签 | 作用 | 示例 |
th:id | 替换id | <input th:id="${user.id}"/> |
th:text | 文本替换 | <p text:="${user.name}">hello</p> |
th:utext | 支持html的文本替换 | <p utext:="${htmlcontent}">content</p> |
th:object | 替换对象 | <div th:object="${user}"></div> |
th:value | 替换值 | <input th:value="${user.name}" > |
th:each | 迭代 | <tr th:each="student:${user}" > |
th:href | 替换超链接 | <a th:href="@{index.html}">超链接</a> |
th:src | 替换资源 |
<script type="text/javascript" th:src="@{index.js}"></script> |
分支:
if和unless :标记了 th:if、th:unless 的标签根据条件决定是否显示。
<tr th:if="${#lists.isEmpty(session.fruitList)}">
//为false执行这行代码
<td colspan="4">sorry,库存为空!</td>
//true执行这行代码
<tr th:unless="${#lists.isEmpty(session.fruitList)}" th:each="fruit :${session.fruitList}">
...显示内容
...
</tr>
判断是否为空 #lists.isEmpty(获取值):
<tr th:if="${#lists.isEmpty(获取值)}">
<tr th:if="${#lists.isEmpty(session.fruitList)}">
链接表达式: @{…}
在Thymeleaf中,如果想引入链接比如link,href,src,需要使用@{资源地址}引入资源。
其中资源地址可以static目录下的静态资源,也可以是互联网中的绝对资源。
<a th:href="@{index.html}">超链接</a>
变量表达式: ${…}:
在Thymeleaf中可以通过 ${...} 进行取值,这点和ONGL表达式语法一致。
取普通字符串:
如果在controller中的Model直接存储某字符串,我们可以直接 ${对象名}
进行取值。
取JavaBean对象:
JavaBean自身有一些其他属性,所以咱们就可以使用 ${对象名.对象属性}
或者
${对象名['对象属性']}
来取值,如果该JavaBean如果写了get方法,也可以通过 get方法取值例如 ${对象.get方法名}。
取List集合(each):
因为List集合是个有序列表,里面内容可能不止一个,需要遍历List对其中对象取值,而遍历需要用到标签:th:each,具体使用为 <tr th:each="item.${userlist}"> ,其中item相当于遍历每一次的对象名,在下面的作用域可以直接使用,而userlist就是类里面的数据或者其他数据存储的List的名称。
<h2>List取值</h2>
<table border="1">
<tr th:each="item:${userlist}">
<td th:text="${item.每个数据的对象名称}"></td>
</tr>
</table>
Map取值:
1. 直接取Map:
很多时候不存在JavaBean而是将一些值放到Map中,在将Map存在Model中,就需要对Map取值,对于Map取值可以${Map名["key"]}来取值,也可以通过${Map名.key}取值,也可以使用 ${map.get('key')}(java语法) 取值。
<h2>Map取值</h2>
<table bgcolor="#8fbc8f" border="1">
<tr>
<td>place:</td>
<td th:text="${map.get('键')}"></td>
</tr>
<tr>
<td>feeling:</td>
<td th:text="${map['键']}"></td>
</tr>
</table>
2. 遍历Map:
如果说你想遍历Map获取它的key和value那也是可以的,这里就要使用和List相似的遍历 方法,使用 th:each="item:${Map名}"
进行遍历,在下面只需使用 item.key
和 item.value
即可获得值。
<h2>Map遍历</h2>
<table bgcolor="#ffe4c4" border="1">
<tr th:each="item:${map}">
<td th:text="${item.key}"></td>
<td th:text="${item.value}"></td>
</tr>
</table>
选择变量表达式: *{…} :
变量表达式不仅可以写成 ${…} ,而且还可以写成 *{…} 。
区别:星号语法对选定对象而不是整个上下文评估表达式。只要没有选定的对象, 美元 (${…}
) 和星号 (*{...}
) 的语法就完全一样。
选定对象:使用 th:object
属性的表达式的结果。就可以选定对象。
<form th:action="@{/update.do}" method="post" th:object="${fruit}">
<!-- 表示在table标签内部所使用的所有属性都是来自于fruit -->
<table id="tbl_fruit" >
<td><input type="hidden" name="fid" th:value="*{fid}"/></td>
<tr>
<th class="w20">名称:</th>
<td><input type="text" name="fname" th:value=" *{fname}"/></td>
</tr>
<tr>
<th class="w20">单价:</th>
<td><input type="text" name="price" th:value="*{price}"/></td>
</tr>
<tr>
<th class="w20">库存</th>
<td><input type="text" name="fcount" th:value="*{fcount}"/></td>
</tr>
<tr>
<th class="w20">备注:</th>
<td><input type="text" name="remark" th:value="*{remark}"/></td>
</tr>
<tr>
<th colspan="2">
<input type="submit" value="修改">
</th>
</table>
</form>
上面的代码如果不使用选定对象,完全等价于:
<td><input type="text" name="fname" th:value="${fruit.fname}"/>
. . . .
. . . .
</td>
...
消息表达: #{…} :
文本外部化(信息)是从模板文件中提取模板代码的片段,以便可以将它们保存在单 独的文件(通常是.properties文件)中,通俗易懂的来说 #{…}
语法就是用来读取配置 文件中数据的,在Thymeleaf你可以使用 #{...}
语法获取消息。