thymeleaf学习
Posted HydraSong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了thymeleaf学习相关的知识,希望对你有一定的参考价值。
标准表达式语法
- ${...}:变量表达式
- *{...}:选择表达式
- \\#{...}:消息(i18n)表达式
- @{...}:URL表达式
- ~{...}:片段表达式
变量表达式
将Thymeleaf与Spring集成-在上下文变量(在Spring行话中也称为 Spring jargon)上执行
OGNL表达式长这样 :
${session.user.name}
他们可以作为属性的值,像这样:
<span th:text="${book.author.name}">
以上代码和这样是相等的(OGNL和SpEL语言)
((Book)context.getVariable("book")).getAuthor().getName()
我们可以使用迭代访问变量
<li th:each="book : ${books}">
$ {books}从上下文中选择称为books的变量,并将其评估为可迭代的变量,以在th:each循环中使用
选择表达式
选择表达式和变量表达式类似,而选择表达式只能在先前选择的对象上执行,不能全局执行
选择表达式长这样:
*{customer.name}
它们作用的对象由th:object属性指定
<div th:object="${book}">
...
<span th:text="*{title}">...</span>
...
</div>
等效于:
{
// th:object="${book}"
final Book selection = (Book) context.getVariable("book");
// th:text="*{title}"
output(selection.getTitle());
}
消息表达式
经常称为text externalization, internationalization或者 i18n
消息表达式允许我们从.properties文件中检索特定于语言环境的消息,通过键引用它们,并可选地应用一组参数。
他们长这样:
#{main.title}
#{message.entrycreated(${entryId})}
在模板中长这样:
<table>
...
<th th:text="#{header.address.city}">...</th>
<th th:text="#{header.address.country}">...</th>
...
</table>
如果希望消息关键字由上下文变量的值确定,或者希望将变量指定为参数。
可以在消息表达式内使用变量表达式,像这样:
#{${config.adminWelcomeKey}(${session.user.name})}
链接表达式
链接表达式用于构建URL并向其添加有用的上下文和会话信息(此过程通常称为URL重写)
一个网页应用部署在你的web服务器的myapp上下文,表达式长这样:
<a th:href="@{/order/list}">...</a>
他会被转换为:
<a href="/myapp/order/list">...</a>
如果我们需要保留会话且未启用Cookie(或服务器尚不知道),请执行以下操作
<a href="/myapp/order/list;jsessionid=23fa31abd41ea093">...</a>
URL还可以加入变量
<a th:href="@{/order/details(id=${orderId},type=${orderType})}">...</a>
他实际是会被转换为这样的:
<!-- Note ampersands (&) should be html-escaped in tag attributes... -->
<a href="/myapp/order/details?id=23&type=online">...</a>
URL表达式可以是相对的,在这种情况下,没有应用程序上下文将作为URL的前缀:
<a th:href="@{../documents/report}">...</a>
也可以是服务器的相对(同样也没有URL前缀)
<a th:href="@{~/contents/main}">...</a>
相对协议(与绝对URL相同,但浏览器将使用与所显示页面相同的HTTP或HTTPS协议):
<a th:href="@{//static.mycompany.com/res/initial}">...</a>
url表达式也当然可以是绝对的
<a th:href="@{http://www.mycompany.com/main}">...</a>
片段表达式
片段表达式是表示标记片段并在模板中使用它们的简单方法。
最常见的用途是使用th:insert或th:replace插入片段:
<div th:insert="~{commons :: main}">...</div>
可以在任何地方使用,像变量一样
<div th:with="frag=~{footer :: #main/text()}">
<p th:insert="${frag}">
</div>
字面量和方法
字面量:
* 文本字面量:\'one text\', \'Another one!\' * 数字字面量:0, 34, 3.0, 12.3, * 布尔字面量:true,false * 空关字面量:null
文本操作:
* String concatenation: + * Literal substitutions: |The name is ${name}|
数学操作:
* Binary operators: +, -, *, /, % * Minus sign (unary operator): -
布尔操作符:
* Binary operators: and, or * Boolean negation (unary operator): !, not
比较和相等:
* Comparators: >, <, >=, <= (gt, lt, ge, le) * Equality operators: ==, != (eq, ne)
条件操作:
* If-then: (if) ? (then) * If-then-else: (if) ? (then) : (else) * Default: (value) ?: (defaultvalue)
表达式预处理
预处理看起来像这样
#{selection.__${sel.code}__}
我们看到的是一个表达式${sel.code},他将被预先执行,然后将其结果(假如是ALL)selection.ALL返回
一些基本属性
th:text替换标签的文本
<p th:text="#{msg.welcome}">Welcome everyone!</p>
th:each和Java的forEach相同
<li th:each="book : ${books}" th:text="${book.title}">En las Orillas del Sar</li>
Thymeleaf模仿的特定的XHTML和HTML5属性th:action, th:value, th:href
<form th:action="@{/createOrder}">
<input type="button" th:value="#{form.submit}" />
<a th:href="@{/admin/users}">
以上是关于thymeleaf学习的主要内容,如果未能解决你的问题,请参考以下文章